Bonjour à tous,

j'ai un petit pb avec pl/sql.
En effet, lorsque je lance la procédure pl/sql suivante avec DELETE, tout fonctionne normalement, alors que si je cherche à optimiser mon code et que j'utilise TRUNCATE, j'ai un message d'erreur.

Pouvez-vous m'aider à résoudre ce problème ?

Par ailleurs, si vous avez des suggestions pour améliorer ce genre de requêtes, elles sont les bienvenues
-copie partielle d'une table d'un schéma dans un autre schéma, de façon régulière (c'est à dire tous les mois)
- création d'un fichier de "log" qui sauvegarde automatiquement les données affichées par le dbms_output.


Merci à tous

MarieO

Le message d'erreur est le suivant:
Error report:
ORA-06550: Ligne 7, colonne 10 :
PLS-00103: Symbole "TABLE" rencontré à la place d'un des symboles suivants :
:= . ( @ % ;
Symbole ":= inséré avant "TABLE" pour continuer.
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:


Voici le code concerné:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DEFINE ValAnnee = 2007
DEFINE ValMois = 12
DEFINE ValPeriode = 200712
DECLARE
 iDateDeb VARCHAR2(25) := To_CHAR(sysdate,'DD/MM/YYYY, HH24:MI:SS');
 iDateFin VARCHAR2(25);
 iPeriode VARCHAR2(6) := &ValPeriode;
 iNb NUMBER;
BEGIN
 TRUNCATE TABLE schema1.maTable;
 INSERT INTO schema1.maTable (id_info, nom, prenom, annee, mois)
  SELECT DISTINCT id_info, nom, prenom, annee, mois
  FROM schema2.maTable
  WHERE annee=&ValAnnee AND mois<=&ValMois ;
 SELECT COUNT(*) INTO iNb FROM schema1.maTable;
 iDateFin := To_CHAR(sysdate,'DD/MM/YYYY, HH24:MI:SS');
 dbms_output.put_line('Consolidation / période ' || iPeriode || ' ---');
 dbms_output.put_line (' durée du traitement : ' || iDateDeb || ' - ' || iDateFin);
 dbms_output.put_line('Nb dans la table : ' || iNb);
END;
/