2010-01-16 34 views
5

Invoco un proceso almacenado desde la aplicación .NET. El proceso devuelve un parámetro de salida de tipo Varchar2. Para fet CH El parámetro de salida que estoy pasando el parámetro al comando como OracleParameter:Oracle.Dataaccess error ORA-06502: PL/SQL: error numérico o de valor: buffer de cadena de caracteres demasiado pequeño

parm12 = new OracleParameter("testkey" 
           , OracleDbType.Varchar2 
           , out2 
           , ParameterDirection.Output); 

Cuando ejecuto el proc estoy recibiendo un error

PL/SQL: numeric or value error: character string buffer too small. 
+0

¿Alguna solución final con el código fuente completo de la muestra trabajando al respecto? – Kiquenet

Respuesta

1

En su código out2 es el argumento que especifica la longitud del parámetro. Entonces, verifique el valor en esa variable, porque aparentemente no es lo suficientemente larga para la salida del procedimiento.

6

Encontrado la respuesta.

Para el parámetro OUT, he declarado el tamaño máximo de varchar - 32767 y comenzó a funcionar.

Para simplificar, el procedimiento almacenado devuelve un parámetro OUT del tipo VARCHAR2. Pero para consumir esa salida de .NET, estaba pasando VARCHAR2 sin ningún tamaño. Entonces, el espacio de búfer asignado para recibir el valor de reanudación fue de 0 bytes. Cuando el proc devuelve el valor más que el búfer asignado que tiene 0 bytes, se equivoca.

Así que especifiqué el máximo de VARCHAR2-32767 en el código C# y comenzó a funcionar :).

Cuestiones relacionadas