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
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 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;
Evidement, j'ai simplifié ma procédure qui a la base et bien plus complexe que cela.
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); }
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
Partager