Bonjour,
Je souhaite automatisé l'alimentation de plusieurs tables.
J'ai créer un procédure qui boucle et alimente chaque tables (60 tables) une après l'autre.
Sachant que certaine table dispose de volumétrie conséquente, je voulais modifier mon code pour essayer de le faire en bulk collect.
J'ai récupéré un exemple de code,
mais je ne comprends pas certaine chose.Dans mon cas, le nom des tables est passé en paramètre (le nom, le nombre de colonne....changent) donc
je n'ai pas la possibilité de faire ce genre de déclaration :
TYPE ARRAY IS TABLE OF all_objects%ROWTYPE;
Existe-t-il un type générique compatible pour toutes les tables ?
Mon code :
L'exemple de Bulk :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CURSOR c_table_l IS SELECT * FROM conf_usi; table_l c_table_l%ROWTYPE; BEGIN FOR table_l IN c_table_l LOOP EXECUTE IMMEDIATE 'INSERT INTO ' || table_l.usi_tab ||' SELECT * FROM '|| table_l.usi_mac ||''; COMMIT; END LOOP;
Est-ce vraiment possible de faire du bulk collect avec le sql dynamique ?
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 CREATE OR REPLACE PROCEDURE test_proc (p_array_size IN PLS_INTEGER DEFAULT 100) IS TYPE ARRAY IS TABLE OF all_objects%ROWTYPE; l_data ARRAY; CURSOR c IS SELECT * FROM all_objects; BEGIN OPEN c; LOOP FETCH c BULK COLLECT INTO l_data LIMIT p_array_size; FORALL i IN 1..l_data.COUNT INSERT INTO t1 VALUES l_data(i); EXIT WHEN c%NOTFOUND; END LOOP; CLOSE c; END test_proc; /
Merci
Partager