PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Fonctions Oracle oui ... mais comment ?
Fonctions Oracle oui ... mais comment ?
Débuté par Judi KL, 21 sep. 2004 17:21 - 1 réponse
Posté le 21 septembre 2004 - 17:21
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.
Posté le 21 septembre 2004 - 22:17
Judi_KL wrote:
Bonjour,

Je cherche à créer des FONCTIONS Oracle qui puissent me renvoyer une
liste de valeurs genre :

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).


Pour moi tu utilises une requete simple requete select "ma_fonction".
Inconvénient : ta fonction doit être déclarée pure par Oracle (sans
insert/update).

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 :

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 ?


--
Emmanuel Lecoester