Bonjour,
Je cherche à créer des FONCTIONS Oracle qui puissent me renvoyer une liste de valeurs genre :
SQL> select nom_fonction (param1) from dual;
nom_fonction (param1) --------------------------- enreg1 enreg2 enreg3 ...
En effet je pourrais ainsi aisément récupérer les valeurs retournées dans WinDev. Mon problème est que je ne sais pas si je dois utiliser les curseurs (et comment le faire) ou si je dois utiliser un type de retour que je définit comme étant un record (enregistrement) ou une table (collection).
Je dispose de procédures déjà prête qui sont sensées me renvoyer des curseurs. J'arrive à obtenir des données mais en utilisant des procédures comme celle-ci dans SQL*Plus :
/* ***** DEBUT DU CODE ***** */
SQL> create or replace procedure GETSPES_TXT_TEST2 ( 2 DenomSpe IN SPECIALITE_Pubres.DenomSpe, 3 Typ IN NUMBER, 4 Domain IN NUMBER, 5 RefSPECIALITE OUT Specialite_Pubres.SPECIALITECurRef, 6 Ret OUT NUMBER) 7 is begin 8 Declare 9 RefSPEPRESENTATION SPECIALITE_Pubres.SPECIALITECurRef; 10 RefSPECIALITE SPECIALITE_Pubres.SPECIALITECurTyp; 11 enreg RefSPECIALITE%rowtype; 12 Ret number; 13 begin 14 AVIDAL_SPECIALITE.GetSpes_Txt (DenomSpe, Typ, Domain, RefSPEPRESENTATION, Ret); 15 LOOP 16 FETCH RefSPEPRESENTATION INTO ENREG; 17 exit when RefSPEPRESENTATION%notfound; 18 dbms_output.put_line(enreg.Denomspe||' - '||enreg.Id_specialite); 19 end LOOP; 20 end; 21 end; /
SQL> variable g_ref refcursor SQL> variable ret number SQL> execute GETSPES_TXT_TEST2 ('LOPR%', 1, 1, :g_ref, :ret)
LOPRESSOR 100 mg cp pelliculé séc - 10287 LOPRESSOR 200 mg cp pelliculé séc LP - 10288 LOPRIL 25 mg cp séc - 10290 LOPRIL 50 mg cp séc - 10291
Procédure PL/SQL terminée avec succès.
/* ***** FIN DU CODE ***** */
Bien sûr cela est inutilisable dans WinDev c'est pourquoi je souhaite utiliser les fonctions.
Je suis sûr que vous avez déjà rencontré ce problème mais ... l'avez-vous résolu et de quelle manière ?
Voilà, j'attends vos réponses ... s'il vous plait.
Judi_KL, au bord du gouffre. |