Bonjour,
contexte : package PL SQL avec procédure stockée
Je dois traiter plusieurs tables source TS1, TS2, ...
Pour chaque enregistrement source, il faut effectuer insert/update dans plusieurs tables de destination TD1, TD2, ...
Tout ceci est paramétré dans la table de paramétrage laquelle je charge dans un VARRAY
Après ce chargement, j'exécute du sql dynamique dans une procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 TYPE TCIB_TYP IS RECORD ( TAB_BD varchar2(100), SELECT_ITF varchar2(4000), -- liste de colonne source CHAMPS_BD varchar2(4000), -- nom colonnes table TD CHAMPS_ITF varchar2(4000), -- CHAMPS_SET varchar2(4000), -- clause 'SET' pour update CLAUSE_PK varchar2(4000) -- clause 'WHERE' pour update ); tcib_tab TCIB_TAB_TYP;
Malheureusement , le tableau de paramétrage n'est pas reconnu lors de la compilation.
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
22
23
24 ... DECLARE stmt vrchar2(4000); BEGIN ici un traitement en boucle par table source TS(n) initialise une collection varray avec les noms de tables à traiter, les clause where et les clauses set. Je voudrais ensuite effectuer pour chaque Table Source TS(n) dans un sql dynamique la lecture de ses enregistrements et la propagation vers les tables TD(m) stmt := ' DECLARE m integer :=0; BEGIN for cursor c1 in (select .... from TS1) LOOP -- syntaxe 'logique' -- traitement de plusieurs table TD(m) cf. paramétrage for m in tcib_tab.FIRST...tcib_tab.LAST LOOP -- KO pour la ligne qui suit : UPDATE '||tcib_tab(m).TAB_BD|| ' SET '|| tcib_tab(m).CHAMPS_SET||' WHERE '||tcib_tab(m).CLAUSE_PK||';' -- END LOOP END LOOP END; '; execute immediate stmt; END;
Erreur de compilation : "Erreur(362,40): PLS-00201: l'identificateur 'M' doit être déclaré"
D'avance merci de votre attention et de vos conseils.
Comment passer les valeurs d'un VARRAY au sql dynamique ?
Cdlt
Partager