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; /
Partager