2
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,它可以正常工作。

我该如何解决这个问题。请帮忙..

4

1 回答 1

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() 进行比较。

分享和享受。

于 2012-10-25T12:26:24.193 回答