Procedure stockee

swasik Messages postés 4 Date d'inscription mercredi 29 mai 2002 Statut Membre Dernière intervention 17 mars 2003 - 19 juin 2002 à 16:14
merzoukb Messages postés 2 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 28 février 2008 - 28 févr. 2008 à 11:41
Bonjour à tous,

bon j'essaie de me depatouiller avec une procedure stockee sous oracle appellee a partir de VB6.
Je veux recuperer des donnees dans un recordset à travers un curseur

en recherchant dans les messages du forum et sur le net j'arrive au code suivant :

le package ou est declare le curseur :
PACKAGE cv_types AS
TYPE c_livre is REF CURSOR;
END cv_types;

Le code de la procedure stockee :
PROCEDURE select_livre(c_livre out cv_types.c_livre)
IS
BEGIN
OPEN c_livre FOR
SELECT * FROM t_bib_livre;
END select_livre;

le code que j'ai utilise dans VB :
Dim adocmd As ADODB.Command
Dim rst_livre As ADODB.Recordset

Set adocmd = New ADODB.Command
Set rst_livre = New ADODB.Recordset
adocmd.CommandText = "{call select_livre()}"
adocmd.CommandType = adCmdStoredProc
adocmd.ActiveConnection= "dsn=BibOracle;UID=ORACLE;PWD=ORACLE"
Set rst_livre = adocmd.Execute

End Sub

Il semblerait ??? que cela bloque sur le parametre de type ref cursor mais dans la doc sur le site oracle, il est precise si j'ai bien compris qu'il n'y a pas besoin de passer les parm de type ref cursor

voila le message d'erreur que j'obtiens :
[Microsoft][ODBC Driver for Oracle][Oracle]ORA-20004

Auriez vous une piste pour m'aider?
D'avance merci
Sabinedqs

2 réponses

merzoukb Messages postés 2 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 28 février 2008
28 févr. 2008 à 11:40
Bonjour,


J'étais confronté au même problème, je peux vous apporter quelques eclairsissement au sujet de votre question.


1. Avant tout il faut rajouter dans le menu "Outils>Réferences" l'ADO choisir "Microsoft ActiveX Data Objects 2.x Library" 


2. Pour la connection  je te mets un exemple (Lien ODBC existe déja) :

   Dim conn As ADODB.Connection
    conn.ConnectionString = _
        "Driver={Microsoft ODBC for Oracle};" & _
        "SERVER=servername;UID=user_name;PWD=mot_de_passe"
    conn.Open

       ' Pour tester la connction
       If conn.State = adStateOpen Then
       MsgBox "Connection effectuée."
       End If

'fermer la connection
    conn.Close
    Set conn = Nothing

2. Pour la procédure stockée :

Je vois que ta créer un package, c'est exactement ce qu'il faut sauf que c'est pas complet, voir ci-dessous  

CREATE OR REPLACE PACKAGE cv_types AS
TYPE t_livre is REF CURSOR;
PROCEDURE select_livre(io_livre out t_livre)
END cv_types;
/
CREATE OR REPLACE PACKAGE BODY cv_types AS
PROCEDURE select_livre(io_livre out t_livre)
v_livre t_livre;
IS
BEGIN
OPEN v_livre FOR SELECT * FROM t_bib_livre;
END select_livre;
END cv_types ;
/

3. Pour l'utilisation du cursur dans VBA je te laisse le soin, car moi aussi je pas encore fini de le faire.
0
merzoukb Messages postés 2 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 28 février 2008
28 févr. 2008 à 11:41
Bonjour,


J'étais confronté au même problème, je peux vous apporter quelques eclairsissement au sujet de votre question.


1. Avant tout il faut rajouter dans le menu "Outils>Réferences" l'ADO choisir "Microsoft ActiveX Data Objects 2.x Library" 


2. Pour la connection  je te mets un exemple (Lien ODBC existe déja) :

   Dim conn As ADODB.Connection
    conn.ConnectionString = _
        "Driver={Microsoft ODBC for Oracle};" & _
        "SERVER=servername;UID=user_name;PWD=mot_de_passe"
    conn.Open

       ' Pour tester la connction
       If conn.State = adStateOpen Then
       MsgBox "Connection effectuée."
       End If

'fermer la connection
    conn.Close
    Set conn = Nothing

2. Pour la procédure stockée :

Je vois que ta créer un package, c'est exactement ce qu'il faut sauf que c'est pas complet, voir ci-dessous  

CREATE OR REPLACE PACKAGE cv_types AS
TYPE t_livre is REF CURSOR;
PROCEDURE select_livre(io_livre out t_livre)
END cv_types;
/
CREATE OR REPLACE PACKAGE BODY cv_types AS
PROCEDURE select_livre(io_livre out t_livre)
v_livre t_livre;
IS
BEGIN
OPEN v_livre FOR SELECT * FROM t_bib_livre;
io_livre:=v_livre ;
END select_livre;
END cv_types ;
/

3. Pour l'utilisation du cursur dans VBA je te laisse le soin, car moi aussi je pas encore fini de le faire.
0
Rejoignez-nous