Pas de retour sur un paramètre output depuis une procédure stockée oracle
Bonjour,
Tout d'abord, je ne connais que très succinctement le VB.
Je suis en excel 2010, et j'ai créé une fonction vba qui se connecte sur une base oracle 11g, et exécute une procédure stockée.
J'ai deux types de paramètres :
- des paramètres input
- un paramètres output
Quand j’exécute ma fonction :
- je n'ai pas de message d'erreur
- la procédure oracle s'exécute bien comme je le souhaite, et donne les résultats attendues
- MAIS : le paramètre output me revient a "null"
Or, lorsque j'exécute cette procédure oracle directement sur sql developper, j'ai un résultat.
Pour valider que ce n'était pas mon code qui était mauvais, j'ai retrouvé exactement le même exemple dans un tutoriel de ce site, que j'ai déployé en exemple sur mon serveur, et j'obtiens exactement le même résultat que sur ma procédure, à savoir :
- je n'ai pas de message d'erreur
- la procédure oracle s'exécute bien comme je le souhaite, et donne les résultats attendues
- MAIS : le paramètre output me revient a "null"
Ci dessous, la procédure "exemple" déployée exprès.
Si qqun a une idée, merci.
-- procédure oracle
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| create or replace package odbpack as
Procedure Proc(param1 in number,param2 in out number,
param3 out number);
Function Func(param1 in varchar2, param2 in out varchar2,
param3 out varchar2) return number;
end odbpack;
/
create or replace package body odbpack as
Procedure Proc(param1 in number,param2 in out number,
param3 out number) is
begin
param2 := param1+param2;
param3 := param1;
end;
Function func(param1 in varchar2, param2 in out varchar2,
param3 out varchar2) return number is
begin
param2 := param1||param2;
param3 := param1;
return length(param2);
end;
end odbpack;
/ |
' fonction vba
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| Private Sub Callproc_Click()
'Dim er As adoError
'On Error GoTo CnEh
Dim cnn1 As ADODB.Connection
Dim cmdExeproc As ADODB.Command
' Open connection.
Set cnn1 = New ADODB.Connection
' Modify the following line to reflect a DSN within your environment
strCnn = "DSN=mondsn; UID=monlogin; PWD=monpswd;"
cnn1.Open strCnn
Set cmdExeproc = New ADODB.Command
cmdExeproc.ActiveConnection = cnn1
cmdExeproc.CommandText = "{call odbpack.proc(?,?,?)}"
' In the next set of code, we have to manually set
' the parameter types since ADO and ODBC cannot derive this
' information when calling packaged procedures.
cmdExeproc.Parameters(0).Value = 1
cmdExeproc.Parameters(1).Direction = adParamInputOutput
cmdExeproc.Parameters(1).Value = 2
cmdExeproc.Parameters(2).Direction = adParamOutput
cmdExeproc.Execute
MsgBox ("Return Values from Proc are : " & _
cmdExeproc.Parameters(1).Value & _
" and " & _
cmdExeproc.Parameters(2).Value)
Set cmdExeproc = New ADODB.Command
cmdExeproc.ActiveConnection = cnn1
cmdExeproc.CommandText = "{? = call odbpack.func(?,?,?)}"
' In the next set of code, we have to manually set
' the parameter types since ADO and ODBC cannot derive this
' information when calling packaged procedures.
cmdExeproc.Parameters(0).Direction = adParamReturnValue
cmdExeproc.Parameters(1).Value = "Odd"
cmdExeproc.Parameters(2).Direction = adParamInputOutput
cmdExeproc.Parameters(2).Value = "Fred"
cmdExeproc.Parameters(3).Direction = adParamOutput
cmdExeproc.Execute
MsgBox ("Return Values from Func are : " & _
cmdExeproc.Parameters(0).Value & _
" and " & _
cmdExeproc.Parameters(2).Value & _
" and " & _
cmdExeproc.Parameters(3).Value)
' Close Connection
cnn1.Close
End Sub |