Salut,

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
create or replace package retour as 
TYPE MON_TYPE IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER ;
table_rec MON_TYPE;
function retourquery (tab varchar2) return MON_TYPE;
end retour;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
create or replace package body retour as
TYPE curs IS REF CURSOR;
function retourquery(tab varchar2) RETURN MON_TYPE IS
c curs;
tab_rec MON_TYPE;
query varchar2(5000) := 'select libelle from '||tab;
Begin
   OPEN C FOR query;
   FETCH C BULK COLLECT Into tab_rec;
   CLOSE C;
   RETURN tab_rec;
End retourquery;
end retour;
Et lorsque j'appelle la fonction voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
set serveroutput on
declare
tablo retour.MON_TYPE;
begin
dbms_output.ENABLE(900000);
tablo := retour.retourquery('udm');
for i in 1 .. tablo.count
loop
dbms_output.put_line(i||' : '||tablo(i));
end loop;
end;
J'ai un message ora-01001 curseur invalide, par contre lorsque je ne passe pas de parametre à ma fonction et que je mets en 'dur' (open c for select libelle from udm) ça marche.
Donc comment je peux faire pour faire passer le nom d'une table (ou autre : par exemple toute une requete) en parametre pour que mon curseur au niveau de ma fonction marche.

Merci d'avance pour les réponses.

Couse1