Ошибка Oracle.Dataaccess ORA-06502: PL / SQL: ошибка числового значения или значения: слишком маленький буфер строки символов - PullRequest
5 голосов
/ 16 января 2010

Я вызываю сохраненный процесс из приложения .NET. Proc возвращает выходной параметр типа Varchar2. Принести ch параметр out Я передаю параметр команде как OracleParameter:

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

Когда я выполняю процедуру, я получаю сообщение об ошибке

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

Ответы [ 2 ]

7 голосов
/ 16 января 2010

Нашел ответ.

Для параметра OUT я объявил размер max max varchar - 32767, и он начал работать.

Для упрощения хранимый процесс возвращает параметр OUT типа VARCHAR2. Но чтобы использовать этот вывод из .NET я передавал VARCHAR2 без какого-либо размера. Таким образом, буферное пространство, выделенное для получения повторного значения, было 0 байтов. Когда proc возвращает значение больше чем выделенный буфер, который равен 0 байтов, он выдает ошибку.

Итак, я указал максимум VARCHAR2-32767 в коде C #, и он начал работать:).

1 голос
/ 16 января 2010

В вашем коде out2 - это аргумент, который указывает длину параметра. Поэтому проверьте значение в этой переменной, потому что, очевидно, оно недостаточно длинное для вывода процедуры.

...