私のストアド関数は、次を使用して一時的なLOBインスタンスを作成します。Dbms_Lob.CreateTemporary(BUFFER, TRUE, Dbms_Lob.SESSION);ここBUFFERで、はローカルCLOB変数です。その後、関数はBUFFERいくつかのデータを入力して返します。
Dbms_Lob.CreateTemporary私の場合の期間パラメータはですが、オラクルのドキュメントDbms_Lob.SESSIONによると:
dbms_lob.createtemporary()に渡されるdurationパラメーターはヒントです。新しい一時LOBの期間は、PL/SQLのロケータ変数の期間と同じです。たとえば、前のプログラムブロックでは、プログラム変数aは常駐フレームの期間を持っています。したがって、ブロックの終わりに、関数の終わりにaのメモリが解放されます。
そのBUFFER CLOBため、機能ブロックを離れた後、Oracleによって破棄される可能性があります。場合によっては、BUFFERが32Kを超えると、Java(JDBC)側からこの方法で返された値を読み取ることができないことがわかります。
関数から一時的なCLOBインスタンスを返す他の方法はありますか?