Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中重用CLOB_Sql_Oracle_Clob - Fatal编程技术网

Sql 在Oracle中重用CLOB

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

如果要重用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(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));