IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème d'appel à un package Oracle


Sujet :

VB.NET

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut Problème d'appel à un package Oracle
    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

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    J'ai réussi
    En fait, il s'agissait bien d'un problème de définition des variables envoyées à Oracle comme je le soupçonnais.
    Il suffisait que je rajoute la taille du (des en l'occurrence) paramètre en output.

    Voici ce que j'ai implémenté :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    With cmdProcedure
        .Connection = gcnxMediatec
        .CommandType = CommandType.StoredProcedure
        .CommandText = "mediatec.pkg_session.ouvrir_session"
     
        Dim inUtilisateur As Oracle.DataAccess.Client.OracleParameter = New Oracle.DataAccess.Client.OracleParameter
        inUtilisateur = .Parameters.Add("ichr_UTILISATEUR", Oracle.DataAccess.Client.OracleDbType.Varchar2, ParameterDirection.Input)
        inUtilisateur.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2
        inUtilisateur.Direction = ParameterDirection.Input
        inUtilisateur.Value = gstrNomUtilisateur
     
        Dim outIDConnexion As Oracle.DataAccess.Client.OracleParameter = New Oracle.DataAccess.Client.OracleParameter
        outIDConnexion.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Int32
        outIDConnexion.Direction = ParameterDirection.Output
        outIDConnexion.ParameterName = "onum_ID_CONNEXION"
        .Parameters.Add(outIDConnexion)
     
        Dim outProfil As Oracle.DataAccess.Client.OracleParameter = New Oracle.DataAccess.Client.OracleParameter
        outProfil.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2
        outProfil.Direction = ParameterDirection.Output
        outProfil.ParameterName = "ochr_PROFIL"
        outProfil.Size = 1
        .Parameters.Add(outProfil)
     
        Dim outCodeRetour As Oracle.DataAccess.Client.OracleParameter = New Oracle.DataAccess.Client.OracleParameter
        outCodeRetour.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Int32
        outCodeRetour.Direction = ParameterDirection.Output
        outCodeRetour.ParameterName = "onum_CODE_RETOUR"
        .Parameters.Add(outCodeRetour)
     
        Dim outMessageRetour As Oracle.DataAccess.Client.OracleParameter = New Oracle.DataAccess.Client.OracleParameter
        outMessageRetour.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2
        outMessageRetour.Direction = ParameterDirection.Output
        outMessageRetour.ParameterName = "ochr_MESSAGE_RETOUR"
        outMessageRetour.Size = 4000
        .Parameters.Add(outMessageRetour)
    End With
     
    ' Exécution de la procédure
    cmdProcedure.ExecuteNonQuery()
     
    intCodeRetour = CInt(cmdProcedure.Parameters("onum_CODE_RETOUR").Value)
    Dim strProfil As String = (cmdProcedure.Parameters("ochr_PROFIL").Value).ToString
    Il y a peut être un moyen pour faire plus simple mais je suis débutant en VB.Net 2008.
    Pour l'instant je me contenterais de ça puisque ca marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2012, 10h35
  2. Réponses: 3
    Dernier message: 22/08/2008, 14h02
  3. Réponses: 5
    Dernier message: 03/10/2006, 10h44
  4. problème de charge CPU SUR ORACLE
    Par crasho007 dans le forum Administration
    Réponses: 35
    Dernier message: 19/05/2004, 15h35
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo