PL/ SQL: числовая ошибка или ошибка значения: буфер символьной строки слишком мал %ROWTYPE
Я не знаю, если я упускаю что-то, но то, что я делаю, это:
у меня есть функция, которая возвращает ROWTYPE
FUNCTION myFunc(pChar CHAR) RETURN myTable%ROWTYPE AS
myTable_rec myTable%ROWTYPE;
BEGIN
SELECT col1, col2, col3
INTO myTable_rec.col1
, myTable_rec.col2
, myTable_rec.col3
FROM myTable
WHERE col4 = pChar;
RETURN(myTable_rec);
END B001_03;
затем в моей процедуре (которая вызывает функцию выше) я объявил:
myTable_rec myTable%ROWTYPE;
но когда я вызываю процедуру:
...
myTable_rec := myFunc(someChar);
...
Я
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
разве поля не должны быть из той же таблицы и того же типа данных (по моему маленькому пониманию)?
изменить: Я пытался Выберите * и каждый работает. Мне определенно чего-то не хватает. Я просто не знаю, так ли это.
2 ответов
Я уверен, что проблема возникает из-за использования Char, который является строкой фиксированной длины. Не уверен, где, но где-то в вашем коде вы пытаетесь поместить строку Char или varchar2 длины N в char длины M, где M > N.
Я получал эту ошибку при доступе к Oracle SP через мой .Net-код. Если кто-то сталкивается с этой ошибкой, то для него/нее указание размера входного / выходного параметра поможет решить проблему.
пример кода выглядит так :
OracleParameter oparamProjectId = mycom.Параметры.Добавить ("p_open_flag", OracleDbType.Varchar2); oparamProjectId.Direction = ParameterDirection.Выход; oparamProjectId.Размер = 100;