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

Oracle ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小错误,oracle,plsql,Oracle,Plsql,我有一个oracle函数,如下所示。当我在SQLDeveloper中运行此命令时,它给出了一个错误 ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太大 小错误 但是,函数中的DBMS\u输出.PUT\u行(最终结果)行正在输出窗口中打印预期输出 有人能帮我吗 create or replace FUNCTION AVERAGE_WORKFORCE(PERIOD in varchar2, YR in varchar2) RETURN CLOB AS FINAL_RESULT CL

我有一个oracle函数,如下所示。当我在SQLDeveloper中运行此命令时,它给出了一个错误

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

但是,函数中的
DBMS\u输出.PUT\u行(最终结果)
行正在输出窗口中打印预期输出

有人能帮我吗

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;
创建或替换
职能平均劳动力(varchar2期间,varchar2年)返回CLOB作为
最终结果CLOB:=null;
字符串\查询\文本CLOB:=null;
输出结果CLOB:=null;
开始
最终结果:=“高级董事、执行经理、高级雇员”;
字符串查询文本:='SELECT xmlement(“tuple”、xmlement(“DESC”、注册员工平均人数”)、xmlement(“PERMANENT|EMP”、GET|COUNT|u Average|u WORKFORCE”(“PERIOD|124;|”、“YR|124;|”、“高级主管”)、xmlement(“PERMANENT|EMP”、GET|COUNT u Average|u WORKFORCE(“PERIOD| PERIOD|124;”、“perior”)、empu element”(“主管”)“管理者”,管理者“))的)元素(永久性的行政管理)的)元素(永久性的行政管理)的)元素(永久性的)元素(永久性的)的)元素(永久性的行政管理)的)的)元素(“永久性的行政管理)的)元素(永久性的,获取计数平均的劳动力(平均平均)劳动力劳动力(永久性的)的)的)元素(永久性的)的,获取统计平均劳动力(平均数)劳动力(平均劳动力(平均劳动力)的)的)劳动力(平均数)的)劳动力(统计统计)的劳动力(平均劳动力(平均劳动力)的)的)的劳动力(劳动力(统计)的)的)劳动力(劳动力(统计)的)的)劳动力(劳动力(“(“(“(“(“(“期限)的)的)的)的”周期(周期(周期(周期(期间)的)的)周期(期间)周期(期间)的)的)周期,周期,期间,周期,周期,周期,周期,周期,周期,周期,周期,周期,周期,周期,周期EMP”,获得平均劳动力数量(“期间”、“年”、“雇员”)来自双重身份;
执行查询返回结果(字符串查询文本,输出结果);
最终结果:=最终结果| |''.| |输出结果;
最终结果:=最终结果;
DBMS_OUTPUT.PUT_LINE(最终结果);
返回最终结果;
最终平均劳动力;

最简单的修复方法是通过插入一些新行将行长度限制在255个字符。请参阅。

最简单的修复方法是通过插入一些新行将行长度限制在255个字符。请参阅。

尝试此DBMS_输出。启用(200000);

尝试此DBMS_输出。启用(200000);

向Alex和Tony道歉(他们显然也有同样的想法)

您的代码正在显示预期的输出,因此DBMS_输出行必须已成功

DBMS_OUTPUT.PUT_LINE(FINAL_RESULT);
QED异常在此点之后发生。函数中还有一行

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

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


您是否尝试过从DUAL执行选择功能?

并向Alex和Tony道歉(他们显然也有同样的想法)

您的代码正在显示预期的输出,因此DBMS_输出行必须已成功

DBMS_OUTPUT.PUT_LINE(FINAL_RESULT);
QED异常在此点之后发生。函数中还有一行

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

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


您是否尝试过从DUAL执行SELECT函数?

您是如何调用该函数的?我直接从sql开发人员那里运行此函数。.过程EXECUTE\u QUERY\u RETURN\u RESULT的规范是什么?我的意思是,您可以将您对该函数的调用发布到日志中吗?是直接调用还是匿名组中的赋值k?看起来你可能在做类似于
声明x varchar2(255);开始x:=平均劳动力(,);end;/
如果varchar小于结果,则会出现该错误。但需要查看您实际执行的操作。函数似乎正常,因此一定是调用方在抱怨?您如何调用该函数?我直接从sql开发人员处运行该函数。.执行查询过程的规范是什么_返回结果?我的意思是,你能发布你对函数的调用吗?是直接选择还是匿名块中的赋值?看起来你可能在做类似于
declare x varchar2(255);begin x:=average\u workforce(,);end;/
如果varchar小于结果,则会出现该错误。但需要查看您实际执行的操作。函数似乎正常,因此一定是调用方在抱怨?OP在控制台中获取输出,并且达到DBMS_输出限制会引发它自己的异常,而不是-06502。我认为我们有answer now。OP正在控制台中获取输出,并且达到DBMS_输出限制会引发其自身的异常,而不是-06502。我认为我们现在已经得到了答案。接受道歉;不确定使用返回值检查正在执行的操作是否明显无礼。当工具生成的代码失败时,可能不明显,尤其是当它失败时的Oracle自己的工具!接受道歉;不确定使用返回值检查正在执行的操作是否明显无礼当工具生成的代码失败时,可能不明显,特别是如果它是Oracle自己的工具!