SQL> declare
2 clob_size pls_integer;
3 the_clob clob;
4 max_size pls_integer:=400;
5 amount_to_read pls_integer;
6 offset pls_integer:=1;
7 vbuf varchar2(400):=null;
8 begin
9 select document into the_clob from doc
10 where doc_id=1;
11 dbms_lob.open(the_clob,dbms_lob.lob_readonly);
12 clob_size:=dbms_lob.getlength(the_clob);
13 amount_to_read:=least(max_size,clob_size);
14 dbms_lob.read(the_clob,amount_to_read,offset,vbuf);
15 dbms_lob.close(the_clob);
16 dbms_output.put_line(replace(vbuf,chr(10),'-'));
17 end;
18 /
declare
*
第 1 行出现错误:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 "SYS.DBMS_LOB", line 759
ORA-06512: 在 line 14
若再次运行,还会出现以下错误请高手指教,该怎么改?SQL> /
declare
*
第 1 行出现错误:
ORA-22293: LOB 已在同一个事务处理中打开
ORA-06512: 在 "SYS.DBMS_LOB", line 710
ORA-06512: 在 line 11
请高手指教,该怎么改?
2 clob_size pls_integer;
3 the_clob clob;
4 max_size pls_integer:=400;
5 amount_to_read pls_integer;
6 offset pls_integer:=1;
7 vbuf varchar2(400):=null;
8 begin
9 select document into the_clob from doc
10 where doc_id=1;
11 dbms_lob.open(the_clob,dbms_lob.lob_readonly);
12 clob_size:=dbms_lob.getlength(the_clob);
13 amount_to_read:=least(max_size,clob_size);
14 dbms_lob.read(the_clob,amount_to_read,offset,vbuf);
15 dbms_lob.close(the_clob);
16 dbms_output.put_line(replace(vbuf,chr(10),'-'));
17 end;
18 /
declare
*
第 1 行出现错误:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 "SYS.DBMS_LOB", line 759
ORA-06512: 在 line 14
若再次运行,还会出现以下错误请高手指教,该怎么改?SQL> /
declare
*
第 1 行出现错误:
ORA-22293: LOB 已在同一个事务处理中打开
ORA-06512: 在 "SYS.DBMS_LOB", line 710
ORA-06512: 在 line 11
请高手指教,该怎么改?
这个缓冲区定义的太小了,你一次性读取太多了如果这个缓冲区就定义400大小,那么你读一次大小就不能超过400,然后不停的循环读取dbms_lob.read(the_clob,400,offset,vbuf);
不是已经决定了小于400了吗?
究竟该怎么改啊?
改成 vvbuf varchar2(400):= ''试试
但输出的怎么是乱码?我文件是sql语句
max改成多少了,也是4000么,