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;