我有一个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;
答案 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。