ORA-06502: PL / SQL: ошибка числа или значения: слишком маленькая ошибка буфера символьной строки - PullRequest
1 голос
/ 18 августа 2010

У меня есть функция оракула, которая приведена ниже. когда я запускаю это в sql-developer, это выдает ошибку

ORA-06502: PL / SQL: ошибка с числовым значением или значением: буфер символьной строки тоже маленькая ошибка.

Однако строка DBMS_OUTPUT.PUT_LINE(FINAL_RESULT) в функции выводит ожидаемый результат в окне вывода.

Может ли кто-нибудь помочь мне в этом ??

create or replace
FUNCTION AVERAGE_WORKFORCE(PERIOD in varchar2, YR in varchar2)  RETURN CLOB AS 
FINAL_RESULT CLOB:=null;
STRING_QUERY_TEXT CLOB:=null;
OUTPUT_RESULT CLOB:=null;
BEGIN
    FINAL_RESULT:='<FINAL_RESULT><HEADER><NAME> </NAME> <NAME>SENIOR DIRECTOR</NAME> <NAME>DIRECTOR</NAME> <NAME>EXECUTIVE</NAME> <NAME>MANAGER</NAME><NAME>CASHIER</NAME><NAME>EMPLOYEE</NAME></HEADER>';    
    STRING_QUERY_TEXT:='SELECT XMLElement("tuple",XMLElement("DESC",''Average number of registered employees''),  XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''SENIOR DIRECTOR'')),  XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''DIRECTOR'')),  XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''MANAGER'')),  XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''EXECUTIVE'')),  XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''CASHIER'')),  XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''EMPLOYEE''))) FROM DUAL';     
    EXECUTE_QUERY_RETURN_RESULT(STRING_QUERY_TEXT,OUTPUT_RESULT);       
    FINAL_RESULT:=FINAL_RESULT||''||OUTPUT_RESULT; 
    FINAL_RESULT:=FINAL_RESULT||''||'</FINAL_RESULT>';
    DBMS_OUTPUT.PUT_LINE(FINAL_RESULT);
    RETURN FINAL_RESULT;
END AVERAGE_WORKFORCE;

Ответы [ 3 ]

6 голосов
/ 18 августа 2010

С извинениями перед Алексом и Тони (которые, очевидно, думали то же самое).

Ваш код показывает ожидаемый результат, поэтому строка DBMS_OUTPUT должна быть успешной.

DBMS_OUTPUT.PUT_LINE(FINAL_RESULT);

QED Исключение происходит после этой точки. У нас есть еще одна строка в функции.

RETURN FINAL_RESULT;

Обоснованное предположение состоит в том, что проблема, как упоминает Алекс, - результат слишком велик для переменной, определенной в вызывающем коде в SQL Developer (т.е. это не CLOB, а строка, которая слишком мала для результата) .

Если это сгенерированный код, это может быть ошибкой в ​​функциях SQL Developer и CLOB.

Вы пытались вместо этого выполнить функцию SELECT FROM DUAL?

1 голос
/ 18 августа 2010

Попробуйте это DBMS_OUTPUT.ENABLE (200000);

0 голосов
/ 18 августа 2010

Самое простое решение - ограничить длину строки 255 символами, вставив несколько новых строк. Смотрите это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...