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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2026 CODEPRJ.COM