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