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 に答える