Bonjour tout le monde,

je n'arrive pas à solutionner mon problème. J'aimerai récolter les infos de noms de table et colonne dans un bulk collect et faire un delete en utilisant le foral.
J'ai observé qu'il y existe un gain de perf non négligeable avec cette méthode, mais je n'arrive pas à la mettre en place.
Alors le code sur le delete n'est pas logique, je suis d'accord, mais je n'arrive pas à faire la jointure entre le nom de table de la variable.


Auriez vous des suggestions svp ?
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
l  DECLARE
 
 TYPE t_table IS TABLE OF liste_table.table%TYPE INDEX BY PLS_INTEGER;
 TYPE t_colonne IS TABLE OF liste_table.colonne%TYPE INDEX BY PLS_INTEGER
 
 
v_table      t_table;
v_colonne    t_colonne;
 
CURSOR c_table IS
          SELECT table, colonne
          FROM   liste_table;
 
       v_cnt   PLS_INTEGER := 0;
 
   BEGIN
 
    OPEN c_table 
      LOOP
        FETCH c_table BULK COLLECT
          INTO v_table      
               v_colonne    LIMIT 1;          
 
       FORALL i IN v_table.first .. v_table.last 
 
    delete from'||v_table(i)||' where 
               valeur_colonne = v_colonne(i)
               ;
 -- Je sais, cela ne va fonctionner mais j'ignore comment la formuler en fait.
         v_cnt := v_cnt + SQL%ROWCOUNT;
 
         EXIT WHEN c_table%NOTFOUND;
 
      END LOOP;
     CLOSE c_table ;
 
      DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_cnt) || ' records deleted.');
 
      COMMIT;
 
   END;
   /