Dbms_lob.createtemporary()関数の要点がよくわかりません。方法は:
DECLARE
myclob CLOB;
BEGIN
myclob := 'foo';
END;
とは異なる:
DECLARE
myclob CLOB;
BEGIN
dbms_lob.createtemporary( myclob, TRUE );
myclob := 'foo';
dbms_lob.freetemporary( myclob );
END;
Create呼び出しとfree呼び出しの間のアクションが関連することを想定していますが、その方法は明確ではありません。
以前は、常にDBMS_LOBパッケージを使用する必要がありました。次に、Oracle 10gで「LOBのSQLセマンティクス」と呼ばれる機能が導入され、簡略化された構文を使用できるようになりました。
CREATETEMPORARY
では、SQLセマンティックでLOBの期間を指定できますが、指定することはできません。
あなたの場合、LOBは同じ方法で解放されます。つまり、LOBが宣言されているスコープ(PL/SQLブロック)を離れると、解放されます。
FREETEMPORARY
を使用すると、テーブルスペースの一時セグメントが解放され、myclob := NULL;
を呼び出すと保持されます。