Exécution d'une procédrue stockée ORACLE dont un des paramètres est un curseur

cedricbuzenot Messages postés 2 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 6 décembre 2005 - 6 déc. 2005 à 11:57
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 - 6 déc. 2005 à 14:28
Bonjour,

Je souhaite exécuter une procédrue stockée ORACLE :
procedure dtm_inn_princ_ps ( ainPrdlvlNumber in number,
ainPrdLvlId in number,
aocurassprd in out Curinnp,
aonCodRet out number,
aonSqlErr out number,
aocSqlErrMSg out varchar2 )
le 3ème paramètre (aocurassprd) est un curseur, et c'est là tout le problème.

J'ai déjà utilisé des procédures stockées sans curseur et cela fonctionne très bien. Mais avec un curseur, je n'arrive même pas à exécuter la proc.

Voici mon code VB:
Public Function Get_principal_innerpack_ID(PRD_LVL_NUMBER As String) As Long
Dim Cmd_Execution As ADODB.Command
Dim tmp_rst As Recordset

Set Cmd_Execution = New ADODB.Command
Cmd_Execution.ActiveConnection = cnx
Cmd_Execution.CommandType = adCmdStoredProc
Cmd_Execution.CommandText = "dtm_fct_prd.dtm_inn_princ_ps"
Cmd_Execution.CommandTimeout = 15

Cmd_Execution.Parameters.Append Cmd_Execution.CreateParameter("ainPrdlvlNumber", adInteger, adParamInput, 3, 12)

Cmd_Execution.Parameters.Append Cmd_Execution.CreateParameter("ainPrdLvlId", adInteger, adParamInput, 3, 1)

Cmd_Execution.Execute

End Function

Erreur -2147217872 :
OAR-06550 Numéro ou types d'arguments éronés dans appel à 'dtm_inn_princ_ps'

J'ai bien essayé d'ajouter le troisième paramètre :
Set tmp_rst = New Recordset
Cmd_Execution.Parameters.Append Cmd_Execution.CreateParameter("Curinnp", adChapter, adParamInputOutput, 4, tmp_rst)
Mais là, j'ai une autre erreur :
Erreur -2147217912 Type de nom non valide

Merci de votre aide.

4 réponses

cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
6 déc. 2005 à 13:37
salut,

vire le cmd.execute

et remplace le par
Dim rs as recordset
set rs = new recordset
rs.open cmd ' tu peux aussi passer les paramètres relatif au curseur (static, dynamique) et de lock (read only, ...)

Vincent
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
6 déc. 2005 à 13:38
ps : n'ajoute pas le recordset en paramètre de l'objet commande, et ton cursor sous oracle doit être en OUT
0
cedricbuzenot Messages postés 2 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 6 décembre 2005
6 déc. 2005 à 14:24
Je viens de tester le code suivant :

Cmd_Execution.Parameters.Append Cmd_Execution.CreateParameter("ainPrdlvlNumber", adInteger, adParamInput, 3, 12) 'CSgl(PRD_LVL_NUMBER))

Cmd_Execution.Parameters.Append Cmd_Execution.CreateParameter("ainPrdLvlId", adInteger, adParamInput, 3, 1)

Set tmp_rst = New Recordset
tmp_rst.Open Cmd_Execution

et j'ai toujours le même erreur -2147217872 :
OAR-06550 Numéro ou types d'arguments éronés dans appel à 'dtm_inn_princ_ps'

Mais je pense que c'est parce que je n'initialise pas le troisième paramètre de la prcédure SQL en in/out. Je vais voir si je peux faire modifer ce paramètre en out uniquement.

Merci.
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
6 déc. 2005 à 14:28
aocurassprd est aussi en IN et tu as oublié de le mettre
0
Rejoignez-nous