ORA-06502:PL / SQL:数字或值错误:字符串缓冲区错误太小

时间:2010-08-18 06:56:01

标签: oracle plsql

我有一个oracle函数,如下所示。当我在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 个答案:

答案 0 :(得分:6)

向亚历克斯和托尼道歉(他们显然也有同样的想法)。

您的代码显示了预期的输出,因此DBMS_OUTPUT行必须成功。

DBMS_OUTPUT.PUT_LINE(FINAL_RESULT);

QED此后发生异常。我们在函数中还有一行。

RETURN FINAL_RESULT;

一个有根据的猜测是问题就像Alex提到的那样 - 结果对于SQL Developer中调用代码中定义的变量来说太大了(即它不是CLOB,而是一个对于结果来说太小的字符串)

如果这是生成的代码,则可能是SQL Developer和CLOB函数的错误。

您是否尝试过使用SELECT函数FROM DUAL?

答案 1 :(得分:1)

试试这个DBMS_OUTPUT.ENABLE(200000);

答案 2 :(得分:0)

最简单的解决方法是通过插入一些换行符将行长度限制为255个字符。请参阅this