clobデータ型を返す関数を実装しました。結果をDBMS Outputに出力したいと思います。残念ながら、ORA-06502: PL/SQL: 数値または値のエラーが発生しました。これは DBMS_OUTPUT のサイズが原因だと思います。
これがコードです。
DECLARE
TYPE tp_col_array IS TABLE OF varchar2(32767);
FUNCTION my_fn (
p_in_proc_date IN varchar2)
RETURN clob AS
vr_output_str clob;
BEGIN
-- Detailed code hidden due to privacy. Sorry
RETURN vr_output_str;
EXCEPTION
WHEN LOGIN_DENIED
THEN
DBMS_OUTPUT.PUT_LINE('Invalid username/password: logon denied');
RETURN 'TEST Terminated';
END my_fn;
BEGIN
DBMS_OUTPUT.PUT_LINE(my_fn('31-AUG-14'));
END;
この問題を理解するのに役立つものを次に示します
1) バッファのサイズを無制限に設定するために以下を追加しましたが、機能しませんでした..
DBMS_OUTPUT.ENABLE(NULL);
また
set serveroutput on size unlimited;
関連リンク: http://www.oracle-developer.net/display.php?id=327
2) vr_output_str のサイズは75387であり、それが戻り型がCLOBである理由です。
DBMS_LOB.getlength(vr_output_str); // =75387
3) 以下を実行することで問題を解決できますが、関数を 3 回実行したため、これは良い解決策ではないと思います。
DBMS_OUTPUT.PUT_LINE(SUBSTR(my_fn ('31-AUG-14'), 1, 32767));
DBMS_OUTPUT.PUT_LINE(SUBSTR(my_fn ('31-AUG-14'), 32768, 32767));
DBMS_OUTPUT.PUT_LINE(SUBSTR(my_fn ('31-AUG-14'), 65536, 32767));
4) Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Productionを使用しています