Bonjour,

J'ai un projet sous VB 2008 et Oracle avec Oracle.DataAccess.

J'ai un package Oracle qui contient plusieurs procédures, dont une interne au package qui est appelé par les autres procédures externes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Package pkg 
    proc RECHERCHER_PROFIL( ichr_UTILISATEUR      IN  VARCHAR2,        
                             ochr_PROFIL           OUT VARCHAR2,
                             onum_CODE_RETOUR      OUT NUMBER,
                             ochr_MESSAGE_RETOUR   OUT VARCHAR2
                           )
        ...
 
    proc OUVRIR_SESSION( ichr_UTILISATEUR      IN  VARCHAR2,
                                    onum_ID_CONNEXION     OUT NUMBER,
                                    ochr_PROFIL           OUT VARCHAR2,
                                    onum_CODE_RETOUR      OUT NUMBER,
                                   ochr_MESSAGE_RETOUR   OUT VARCHAR2
                                )
        ... appel de RECHERCHER_PROFIL (ichr_UTILISATEUR      IN  VARCHAR2,        
                             ochr_PROFIL           OUT VARCHAR2)
End package PKG
Ce package fonctionne parfaitement quand il est appelé directement sous Oracle.

Mais quand j'essaye de l'utiliser sous VB, j'ai le message :
ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit (-6502)
Je soupçonne un problème d'appel au package car comme je l'ai dit le package est OK. Voici comment je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim cmdProcedure As New Oracle.DataAccess.Client.OracleCommand
 
                    With cmdProcedure
                        .Connection = gcnxMediatec
                        .CommandType = CommandType.StoredProcedure
                        .CommandText = "mediatec.pkg_session.ouvrir_session"
                        .BindByName = True
 
                        Dim iparam = .Parameters.Add("ichr_UTILISATEUR", Oracle.DataAccess.Client.OracleDbType.Varchar2, ParameterDirection.Input)
                        iparam.Value = gstrNomUtilisateur
 
                        .Parameters.Add("onum_ID_CONNEXION", Oracle.DataAccess.Client.OracleDbType.Int32, ParameterDirection.Output)
                        .Parameters.Add("ochr_PROFIL", Oracle.DataAccess.Client.OracleDbType.Varchar2, ParameterDirection.Output)
                        .Parameters.Add("onum_CODE_RETOUR", Oracle.DataAccess.Client.OracleDbType.Int32, ParameterDirection.Output)
                        .Parameters.Add("ochr_MESSAGE_RETOUR", Oracle.DataAccess.Client.OracleDbType.Varchar2, ParameterDirection.Output)
                    End With
 
Dim dr As Oracle.DataAccess.Client.OracleDataReader = cmdProcedure.ExecuteReader
 
                    ' Récupération du code retour
                    intCodeRetour = dr.GetInt32(3)
                    MessageBox.Show(CStr(intCodeRetour))
Merci de m'aider car je découvre .Net et je suis un peu perdu.

Petite précision: le projet, et notamment le même package Oracle, fonctionne parfaitement sous VB6