私のストアド関数は、次を使用して一時的な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インスタンスを返す他の方法はありますか?