--当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