Bonjour,

J'ai un problème pour ecrire une procedure.
Idealement, je voudrais ecrire la procedure suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
PROCEDURE maProc ( var1 IN VARCHAR2, cs OUT SYS_REFCOURSOR )
IS
BEGIN
    open CS for select * from maTable where monChamps in ( var1 );
END;
sachant que var1 peux contenir plusieurs valeurs :
exemple 'bleu','blanc','rouge'
Mais cette procedure ne fonctionne pas !!!
Elle compile, mais ne renvois pas de resultat correct

J'ai alors essayé de proceder de la facon suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
PROCEDURE maProc ( var1 IN VARCHAR2, var2 IN VARCHAR2 DEFAULT null, var3 VARCHAR2 DEFAULT null, cs OUT SYS_REFCOURSOR )
IS
    CURSOR C1 IS select * from maTable where champs in (var1, var2, var3 );
BEGIN
    open C1; 
    cs := C1;
END;
Mais ici, l'affectation cs := C1 ne compile pas !!!!

Une solution serait de construire la requete comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
PROCEDURE maProc ( var1 IN VARCHAR2,  cs OUT SYS_REFCOURSOR )
IS
   myQuery varchar2;
BEGIN
  myquery := 'select ....... champs1 in ( ' || var1 || ' ) ....';
   open cs for myQuery;
END;
mais je ne veux pas utilise cette methode car ma requete peu faire une centaine de ligne et que j'ai plusieur parametres de ce type


Quelqu'un aurait il une idée pour resoudre mon problème.

Merci