Programmation fonction stockées Oracle

echoupe Messages postés 21 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 15 mars 2007 - 26 juil. 2004 à 16:45
Egalon Messages postés 124 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 17 juin 2011 - 19 août 2004 à 14:15
Salut!
Voilà, je voudrais savoir comment écrire une fonction stockée sous Oracle qui me retourne un resulset et comment l'appeler depuis VisualBasic et java.
Je sais écrire une fonction qui retourne une valeur de type simple tq:
CREATE OR REPLACE FUNCTION X
(cpte varchar, sens varchar, tp number)
return varchar is
begin

if tp = 1 then
return( sens || '(' || cpte || ')');
elsif tp > 0 then
return( to_char(tp)|| '*' || sens || '(' || cpte || ')');
elsif tp = -1 then
return( '-' || sens || '(' || cpte || ')');
elsif tp < 0 then
return( to_char(tp)|| '*' || sens || '(' || cpte || ')');
else
return( '');
end if;
end;
Mais pas une qui retourne un resultset.
Aidez-moi SVP.

3 réponses

stabe Messages postés 144 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 17 juin 2006
26 juil. 2004 à 17:40
Bonjour,

Je ne sais pas comment on appelle une fonction stockée, peut être même que ce n'est pas possible.
Moi j'utilise des procédures stockées contenant des variables de retour (OUT), ce qui revient au même.

-- exemple à adapter
CREATE OR REPLACE PROCEDURE p_test (var_entree in INTEGER, var_retour out INTEGER)
BEGIN
if var_entree = 1 THEN
var_retour := 20 ;
else
var_retour := 60 ;
END IF ;
END

En VB, ça donne :

' connexion oracle
Set dfwConn = New ADODB.Connection
Provider = "DSN=" & ORACLE_DSN
DataSource = "SERVER=" & ORACLE_SERVER
& ";ConnecString=" & ORACLE_SCHEMA & ";"
sConnect = Provider & ";" & DataSource
dfwConn.Open sConnect, ORACLE_LOGIN, ORACLE_PWD

Set Cmd = New ADODB.Command
Cmd.CommandType = adCmdStoredProc
Set Cmd.ActiveConnection = dfwConn
Cmd.CommandText = "p_test"
Set Prm_Criteria = Cmd.CreateParameter("var_retour", adInteger, adParamOutput)
Cmd.Parameters.Append Prm_Criteria
Cmd.Execute
msgbox Cmd("var_retour")

-- stabe --
0
Egalon Messages postés 124 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 17 juin 2011
19 août 2004 à 10:25
Salut,
(pour une fois que je peux sortir ma petite science...)
Il est tout à fait possible d'utiliser l'appel des fonctions sous VB (c'est comme pour les procédures ou vois plus loin dans cette réponse) mais je te le déconseille pour la simple raison que tu peux pas faire tout ce que tu veux avec tes fonctions. Utilise des procédures stockées et passe un paramètre de retour.

Sinon tu peux appeler une fonction en utilisant une simple requete select avec un New ADODB.Recordset
et tu pousses la requete:

SELECT ma_fonction(mes parametres) from DUAL

et là ca te renvoie un truc sous forme de tableau avec une seule ligne.

Par contre je recherche comment appeler une procédure qui aurait ce genre d'entete:

boitierI IN boitiers.nom%TYPE,
       datestring IN varchar2, ....


sachant que boitiers.nom%TYPE, c'est un varchar2(20) et le problème c'est :

Parameters.Append .CreateParameter(, adVarChar, adParamInput) 

le advarchar semble ne pas être digéré et erreur d'éxécution 3708

Signé: Egalon qui comprend difficilement
0
Egalon Messages postés 124 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 17 juin 2011
19 août 2004 à 14:15
Ben voilà j'ai trouvé ma soluce
alors pour celui que ca interesse:
Parameters.Append .CreateParameter(, adVarChar, adParamInput, 20) 

et donc 20 c'est la longueur de mon parametre...

Mais ça résout pas mon problème d'appel qui retourne tjs 0 (donc une erreur gérée dans ma proc.)

Signé: Egalon qui comprend difficilement
0
Rejoignez-nous