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 语义”的特性,现在您可以使用简化的语法。

您可以在CREATETEMPORARYSQL 语义中指定 LOB 的持续时间,但您不能。

在您的情况下,LOB 以相同的方式被释放,即当您离开声明 LOB 的范围(即 PL/SQL 块)时,它就会被释放。

当你使用FREETEMPORARY时,表空间中的临时段被释放,当你调用时myclob := NULL;它会被保留。

于 2014-01-19T19:32:34.907 回答