【发布时间】:2013-12-09 21:01:37
【问题描述】:
对于 PL/SQL 中的临时 LOB,即不会存储在数据库中的 LOB,创建和处置它们的最佳/正确方法是什么?我特别想dbms_lob.createtemporary和dbms_lob.free temporary。
例如,这些情况有何不同?
-- CASE 1
DECLARE
mylob CLOB;
BEGIN
mylob = 'foo';
END;
--CASE 2
DECLARE
mylob CLOB;
BEGIN
dbms_lob.createtemporary( mylob, TRUE );
mylob = 'foo';
dbms_lob.freetemporary( mylob );
END;
假设我有一个返回 LOB 的函数。我应该在函数中创建一个临时 lob 并让调用者负责释放它吗?
DECLARE
myclob2 CLOB;
FUNCTION myfn RETURN CLOB IS
myclob1 CLOB := '';
BEGIN
dbms_lob.createtemporary( myclob1, TRUE );
myclob1 := 'foo';
RETURN myclob1;
END myfn;
BEGIN
myclob2 := myfn;
dbms_output.put_line( myclob2 );
dbms_lob.freetemporary( myclob2 );
END;
编辑: 我想我特别感兴趣的事情之一是如何正确处理 LOB,以便它在会话结束之前不会一直存在。
【问题讨论】:
-
我偏爱使用带有“in out”参数的过程。更容易维护 imo。如果我有时间,我稍后会发布一个示例