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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
'select n from t order by 1'
j'ai une requête du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 '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.