ORA-20000: ORU-10027: buffer overflow 两个解决方法

--当dbms_output输出有大量的文本时,则会出现以下错误:
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 15

解决方法有两种:
(1).set   serveroutput   on   size   10000000
(2).exec  dbms_output.enable(999999999999999999999);

实例:
SQL> declare
  2      v_total   pls_integer;
  3  begin
  4      select count(*)
  5        into v_total
  6        from tb;
  7  
  8      while(v_total > 0) loop
  9          execute immediate 'begin forall_update_test; end;';
 10          commit;
 11          v_total := v_total - 10000;
 12  
 13      end loop;
 14  end;
 15  /

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 15

SQL> set serveroutput on size 100000000;
SQL> 
SQL> declare
  2      v_total   pls_integer;
  3  begin
  4      select count(*)
  5        into v_total
  6        from t4;
  7  
  8      while(v_total > 0) loop
  9          execute immediate 'begin forall_update_test; end;';
 10          commit;
 11          v_total := v_total - 10000;
 12  
 13      end loop;
 14  end;
 15  /
 
update rows:10000
update rows:10000
update rows:10000
update rows:10000
update rows:10000
update rows:10000
.........
update rows:10000
 
PL/SQL procedure successfully completed
 
--两外打开一个session:
SQL> declare
  2      v_total   pls_integer;
  3  begin
  4      select count(*)
  5        into v_total
  6        from tb;
  7  
  8      while(v_total > 0) loop
  9          execute immediate 'begin forall_update_test; end;';
 10          commit;
 11          v_total := v_total - 10000;
 12  
 13      end loop;
 14  end;
 15  /

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 15

SQL> exec  dbms_output.enable(999999999999999999999);
SQL> 
SQL> declare
  2      v_total   pls_integer;
  3  begin
  4      select count(*)
  5        into v_total
  6        from t4;
  7  
  8      while(v_total > 0) loop
  9          execute immediate 'begin forall_update_test; end;';
 10          commit;
 11          v_total := v_total - 10000;
 12  
 13      end loop;
 14  end;
 15  /
 
update rows:10000
update rows:10000
update rows:10000
update rows:10000
update rows:10000
update rows:10000
.........
update rows:10000
 
PL/SQL procedure successfully completed

 

posted @ 2017-10-28 09:57  碧水幽幽泉  阅读(7157)  评论(0)    收藏  举报