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

PL/SQL Oracle Discussion :

ORA-06550 et ODP


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Par défaut ORA-06550 et ODP
    Bonjour,

    Je développe une application web. Aspx/c# / ODP(ODTwithODAC1020221)/Oracle (10.2.0.1.0)
    J'exécute une procédure stockée depuis mon code C# celle-ci renvoie un paramètre de sortie en varchar2.
    Après l'exécute ExecuteReader, j'obtiens l'erreur ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit
    ligne 22\nORA-06512: à ligne 1"
    .
    Or quand, j'exécute ma procédure sous sqlplus. Elle fonctionne parfaitement.
    code de ma procédure
    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
    PROCEDURE CONNECT_UTILISATEUR(pPofilLib OUT VARCHAR2) AS
     
     
    		LF$FicOUT	UTL_FILE.FILE_TYPE ;  
    		LC$Dir_out  VARCHAR(30)   := 'FICHIERS_OUT' ;
    		LC$Fic_in   VARCHAR2(128) := 'CONNECT_UTILISATEUR.txt' ;
    		vPofilLib VARCHAR(255);
    	BEGIN
    		LF$FicOUT := UTL_FILE.FOPEN( LC$Dir_out, LC$Fic_in, 'W', 32764 ) ;
    		pPofilLib:= 'testeretour';
    		EXCEPTION when OTHERS THEN
     
    			UTL_FILE.PUT_LINE( LF$FicOUT, pPofilLib);
    			UTL_FILE.FCLOSE( LF$FicOUT);
    			raise;
    	END;
    Appel de ma procédure en C#
    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
    using (OracleConnection conn = new OracleConnection())
            {
                conn.ConnectionString = "Data Source=Ecandela;Persist Security Info=True;User ID=atlog;Password=rouen76;";
                conn.Open();
                OracleCommand cmd = new OracleCommand("PKG_WEB.CONNECT_UTILISATEUR", conn);
                OracleDataReader OraReader;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
     
                OracleParameter pPofilLib = new OracleParameter();
                pPofilLib.OracleDbType = OracleDbType.Varchar2;
                pPofilLib.Direction = System.Data.ParameterDirection.Output;
                pPofilLib.Value = null;
                cmd.Parameters.Add(pPofilLib);
     
     
                OraReader = cmd.ExecuteReader();
                OraReader.Read();
                return (string)(pPofilLib.Value);
     
            }
    Evidement, j'ai simplifié ma procédure qui a la base et bien plus complexe que cela.

    Je pense que cela vient peut-être des drivers ODP mais ??

    Merci d'avance pour vos réponses ou suggestions.

    PS: je ne cherche pas de solution de contournement telle une fonction ou procedure renvoyant un cursor ou un dataset

    Cyril

  2. #2
    Membre éprouvé

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 109
    Par défaut
    salut
    il semblerait que tu essaies d'affecter une valeur a une ou des variable(s) plus que peut ou peuvent en contenir donc si tu essaies d'augmenter la taille de tes variables que tu as déclaré et tester

    LC$Dir_out VARCHAR(30) := 'FICHIERS_OUT' ;
    LC$Fic_in VARCHAR2(128) := 'CONNECT_UTILISATEUR.txt' ;
    vPofilLib VARCHAR(255);

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Par défaut
    merci de ta réponse.

    J'ai encore plus simplifié la procédure et toujours la même erreur.
    Je ne vois pas quelle variable est plus grande que l'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCEDURE CONNECT_UTILISATEUR(pPofilLib OUT VARCHAR2) AS
    BEGIN
    		pPofilLib:= 'testeretour';
    END;

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Le problème est dans ton code C#. Il faut s’assurer que la variable en sortie peut recevoir le résultat envoyé par la procédure, autrement dit que t’as alloué assez d’espace mémoire pour ta variable C#.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Par défaut
    merci

    J'ai renseigné la la précision du paramètre de retour en varchar2(255)
    Toujours la même erreur.
    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
     
    using (OracleConnection conn = new OracleConnection())
            {
                conn.Open();
                OracleCommand cmd = new OracleCommand("PKG_WEB.CONNECT_UTILISATEUR", conn);
                OracleDataReader OraReader;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
     
                OracleParameter pPofilLib = new OracleParameter();
                pPofilLib.OracleDbType = OracleDbType.Varchar2;
                pPofilLib.Direction = System.Data.ParameterDirection.Output;
                pPofilLib.Precision = 255;
                pPofilLib.Value = null;
                cmd.Parameters.Add(pPofilLib);
     
                OraReader = cmd.ExecuteReader();
                OraReader.Read();
                return (string)(pPofilLib.Value);
     
            }

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Salut,


    c'est pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pPofilLib.Precision = 255;
    qu'il faut appeller mais

    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

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

Discussions similaires

  1. ORA-06550: Ligne 10, colonne 41 pb
    Par CROSS dans le forum SQL
    Réponses: 6
    Dernier message: 29/05/2012, 14h04
  2. Erreur oracle ORA-06550
    Par Lolitaaa dans le forum Oracle
    Réponses: 4
    Dernier message: 03/06/2009, 10h37
  3. Réponses: 5
    Dernier message: 04/07/2008, 14h39
  4. faire une multiplication Pls-00320 Ora-06550
    Par CROSS dans le forum Oracle
    Réponses: 4
    Dernier message: 05/12/2006, 14h06
  5. [9i] ORA-06550:
    Par fortlow dans le forum Oracle
    Réponses: 2
    Dernier message: 08/12/2005, 11h28

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