Oracle函数中的数字或值错误

时间:2012-10-25 11:45:38

标签: oracle plsql

create or replace
FUNCTION REPORT_GENERATION(  
 IN_STATUS IN VARCHAR2
 ,IN_USERID IN varchar2
)  RETURN CLOB AS 

  FINAL_RESULT CLOB:=null;
  OUTPUT_RESULT CLOB:=null;
 BEGIN
   /* My implementation. OUTPUT_RESULT contains large XML string */   
   FINAL_RESULT:=FINAL_RESULT||''||OUTPUT_RESULT; 
   FINAL_RESULT:=FINAL_RESULT||''||'</EXCEL_MAIN>'; 
   RETURN FINAL_RESULT; 
END REPORT_GENERATION;

当我执行此功能时,我收到错误

ORA-06502: PL/SQL: numeric or value error

我在返回FINAL_RESULT时收到错误。 FINAL_RESULT的长度是38123.如果我用一些小字符串替换FINAL_RESULT它正在没有任何问题。

如何解决此问题。请帮忙..

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

create or replace
FUNCTION REPORT_GENERATION(  
 IN_STATUS IN VARCHAR2
 ,IN_USERID IN varchar2
)  RETURN CLOB AS 

  FINAL_RESULT  CLOB := EMPTY_CLOB();
  OUTPUT_RESULT CLOB := EMPTY_CLOB();
 BEGIN
   DBMS_LOB.APPEND(FINAL_RESULT, OUTPUT_RESULT); 
   DBMS_LOB.APPEND(FINAL_RESULT, '</EXCEL_MAIN>'); 
   RETURN FINAL_RESULT; 
END REPORT_GENERATION;

一对夫妇注意到:

  1. 使用LOB(CLOB或BLOB)时,总是将它们初始化为EMPTY_CLOB或EMPTY_BLOB。不这样做会导致一堆问题。使用上面的代码,将EMPTY_CLOB更改为NULL以查看会发生什么。

  2. 如果您已完成#1,则无法将CLOB或BLOB与NULL进行比较,因为它不是null。将空CLOB / BLOB与EMPTY_CLOB()/ EMPTY_BLOB()进行比较。

  3. 分享并享受。