29

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

4

1 に答える 1

22

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

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

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

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

于 2014-01-19T19:32:34.907 に答える