[Oracle 10G] Dbms_sql et les tableaux
Bonjour.
Je suis en train de "dynamiser" une procédure et je suis un peu embêté.
Pour faire simple, à partir d'une table en paramètre, je construis une requête et je veux ensuite mettre le résultat de cette requête dans un tableau (au pire dans des variables que je traiterai au fur et à mesure). Mais bien évidemment, je ne sais pas à l'avance combien de lignes ni de colonnes va me retourner la requête.
Après une journée de recherche, j'ai presque trouvé la solution mais je bloque sur la dernière étape.
Voici un script qui qui se rapproche de ce que je veux.
Code:
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
| declare
c NUMBER;
d NUMBER;
n_tab DBMS_SQL.NUMBER_TABLE;
indx NUMBER := -10;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;
dBMS_SQL.PARSE(c, 'select n from t order by 1', DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_ARRAY(c, 1, n_tab, 10, indx);
d := DBMS_SQL.EXECUTE(c);
loop
d := DBMS_SQL.FETCH_ROWS(c);
DBMS_SQL.COLUMN_VALUE(c, 1, n_tab);
EXIT WHEN d != 10;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(c);
EXCEPTION WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(c) THEN
DBMS_SQL.CLOSE_CURSOR(c);
END IF;
RAISE;
END;
/ |
La "petite" différence est qu'au lieu d'avoir
Code:
'select n from t order by 1'
j'ai une requête du genre:
Code:
'select t1.n1, t2.n2 from table1 t1, table2 t2 where t1.n3=t2.n3'
Et je n'arrive pas à gérer un tableau.
(NB: dans cet exemple, je ne comprends pas bien la gestion de 'indx' )
Merci de m'aider à résoudre ce pb dont la solution m'intéresse beaucoup.