dbms_lob.createtemporary()的作用是什么?

31

我不太明白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;

我假设在创建和释放调用之间的操作使其相关,但我不清楚具体是怎样的。


1
可能dbms_lob.freetemporary释放内存块(可能非常大)而不必等待变量超出作用域,因此您可以更加灵活地控制内存使用。 - Egor Skriptunoff
1个回答

23
早期,您总是被迫使用DBMS_LOB包。然后在Oracle 10g中引入了名为“LOB的SQL语义”的功能,现在您可以使用简化的语法。
在“CREATETEMPORARY”中,您可以指定LOB的持续时间,但在SQL语义中则不能。
在您的情况下,当您离开声明LOB的作用域(即PL/SQL块)时,LOB会以相同的方式被释放。
当您使用“FREETEMPORARY”时,表空间中的临时段将被释放;当您调用“myclob:= NULL;”时,它将被保留。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接