web-dev-qa-db-ja.com

dbms_lob.createtemporary()のポイントは何ですか?

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呼び出しの間のアクションが関連することを想定していますが、その方法は明確ではありません。

26
eaolson

以前は、常にDBMS_LOBパッケージを使用する必要がありました。次に、Oracle 10gで「LOBのSQLセマンティクス」と呼ばれる機能が導入され、簡略化された構文を使用できるようになりました。

CREATETEMPORARYでは、SQLセマンティックでLOBの期間を指定できますが、指定することはできません。

あなたの場合、LOBは同じ方法で解放されます。つまり、LOBが宣言されているスコープ(PL/SQLブロック)を離れると、解放されます。

FREETEMPORARYを使用すると、テーブルスペースの一時セグメントが解放され、myclob := NULL;を呼び出すと保持されます。

19