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