现在的位置: 首页 > 综合 > 正文

坑爹的plsql dev dbms_output输出长度限制

2013年08月04日 ⁄ 综合 ⁄ 共 1610字 ⁄ 字号 评论关闭

有时候需要用dbms_output  spool出一些脚本,所以很受长度100w个字符这个限制的困扰,但是后来发现在10GR2版本下,buffer已经可以很长很长,而行长可以达到32767个字符,为什么plsql dev里还不行呢,今天有空做了个实验

 

首先 在plsql dev里打开一个command window

SQL> set serveroutput on size unlimited;
SQL> declare
  2  x varchar2(4000);
  3  begin
  4  x:=rpad('*',250,'*');
  5  for i in 1..4000 loop
  6  dbms_output.put_line(x);
  7  end loop;
  8  end;
  9  /

ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: 在 "SYS.DBMS_OUTPUT", line 32
ORA-06512: 在 "SYS.DBMS_OUTPUT", line 97
ORA-06512: 在 "SYS.DBMS_OUTPUT", line 112
ORA-06512: 在 line 7

我了个去啊!说好的unlimited呢......
好吧还是100w吧

SQL> set serveroutput on size 1000000;
SQL> declare
  2  x varchar2(4000);
  3  begin
  4  x:=rpad('*',250,'*');
  5  for i in 1..4000 loop
  6  dbms_output.put_line(x);
  7  end loop;
  8  end;
  9  /

PL/SQL procedure successfully completed

哦 好了,100w呢(要是钱就好了.... `ω`)

那么再来一个100w+1?

SQL> set serveroutput on size unlimited;
SQL> declare
  2  x varchar2(4000);
  3  begin
  4  x:=rpad('*',250,'*');
  5  for i in 1..4000 loop
  6  dbms_output.put_line(x);
  7  end loop;
  8  dbms_output.put_line('*');
  9  end;
 10  /

ORA-20000: ORU-10027: buffer overflow, limit of 1000000 bytes
ORA-06512: 在 "SYS.DBMS_OUTPUT", line 32
ORA-06512: 在 "SYS.DBMS_OUTPUT", line 97
ORA-06512: 在 "SYS.DBMS_OUTPUT", line 112
ORA-06512: 在 line 9

真是不负众望的溢出了啊.....

 

然后打开一个sqlplus

先不做任何限制,只打开显示,直接来个100w+1吧

SQL> set serveroutput on;
SQL> declare
  2  x varchar2(4000);
  3  begin
  4  x:=rpad('*',250,'*');
  5  for i in 1..4000 loop
  6  dbms_output.put_line(x);
  7  end loop;
  8  dbms_output.put_line('*');
  9  end;
 10  /

PL/SQL 过程已成功完成

真是给人一种莫名其妙的挫败感呢......一下就完成了......
恩,实际上就算循环8k次也就是 200w个字符也完全没有问题呢

所以说要spool出一个特别长的脚本的时候 还是sqlplus吧.....

 

 

最后是今天的卖萌小故事

oracle 还有plsql dev 之间的三角关系感觉就像

我:亲~
oracle:亲~
plsqldev:...

  100w次以后

我:亲~
oracle:亲~
plsqldev:尼玛!亲够了没有啊!老子是死死团的,都给我去死!

ora-剧终

【上篇】
【下篇】

抱歉!评论已关闭.