Sql 在Oracle中重用CLOB
如果要重用CLOB变量,将其重新初始化为新值就足够了,还是需要使用freetemporary函数?你有其他的方法(最好的方法)来做这件事吗Sql 在Oracle中重用CLOB,sql,oracle,clob,Sql,Oracle,Clob,如果要重用CLOB变量,将其重新初始化为新值就足够了,还是需要使用freetemporary函数?你有其他的方法(最好的方法)来做这件事吗 DECLARE message CLOB; BEGIN message := 'The quick brown fox jumps over the lazy dog.'; dbms_output.put_line(message); message := 'Test'; dbms_output.put_line(mes
DECLARE
message CLOB;
BEGIN
message := 'The quick brown fox jumps over the lazy dog.';
dbms_output.put_line(message);
message := 'Test';
dbms_output.put_line(message);
END;
或
您的代码很好(顶部和底部版本)
见:
PL/SQL中的CLOB变量
1 declare
2 myStory CLOB;
3 revisedStory CLOB;
4 myGist VARCHAR2(100);
5 revisedGist VARCHAR2(100);
6 BEGIN
7 -- select a CLOB column into a CLOB variable
8 SELECT Story INTO myStory FROM print_media WHERE product_id=10;
9 -- perform VARCHAR2 operations on a CLOB variable
10 revisedStory := UPPER(SUBSTR(myStory, 100, 1));
11 -- revisedStory is a temporary LOB
12 -- Concat a VARCHAR2 at the end of a CLOB
13 revisedStory := revisedStory || myGist;
14 -- The following statement will raise an error because myStory is
15 -- longer than 100 bytes
16 myGist := myStory;
17 END;
请注意,在“PL/SQL中的CLOB变量”的第10行中,临时
CLOB
是隐式创建的,由revisedStory
CLOB
定位器。在当前界面中,该行可以扩展为:
buffer VARCHAR2(32000)
DBMS_LOB.CREATETEMPORARY(revisedStory);
buffer := UPPER(DBMS_LOB.SUBSTR(myStory,100,1));
DBMS_LOB.WRITE(revisedStory,length(buffer),1, buffer);
在第13行中,myGist
被附加到临时LOB
的末尾,该行
具有以下相同的效果:
DBMS_LOB.WRITEAPPEND(revisedStory, myGist, length(myGist));
因此,您不需要调用DBMS\u LOB
过程,因为PL/SQL会隐式地将代码转换为相应的DBMS\u LOB
调用
您也不需要将这些值释放为:
由于SELECT
或
在PL/SQL结束时自动释放赋值
块/函数/过程。您可以选择将临时LOB释放到
通过调用回收系统资源和临时表空间
CLOB
变量上的DBMS\u LOB.freetimal
但是,如果您想控制何时释放内存(就像在底部版本中一样),可以选择手动调用此函数。谢谢!那么全球CLOB呢?DBMS_LOB.FREETEMPORARY和将CLOB分配给NULL是否相同?@superigno这在文档中不清楚。我认为它们有细微的区别(即
DBMS_LOB.freetimorary()
可以释放所有内存,但赋值NULL
必须保留一些内存才能知道它是一个NULL
值,而不是其他值,但可以释放以前分配给文本的大部分内存),无法访问内部工作,这只是猜测。
DBMS_LOB.WRITEAPPEND(revisedStory, myGist, length(myGist));