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-2025 CODEPRJ.COM