DBMS_OUTPUT 是有缓存区上限的,默认为10000字节,当超过10000后会 抛"buffer overflow, limit of 10000 bytes" 的异常。
如下测试存储过程:
create or replace procedure TestMoreDBMSOutPut(
countnum IN number,
logerrdes out varchar2
)
is
PrintStr varchar2(1000);
begin
PrintStr := '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111';
for i in 1..countnum loop
dbms_output.put_line(PrintStr);
end loop;
logerrdes := 'OK!';
commit;
EXCEPTION
WHEN OTHERS THEN
rollback;
logerrdes := 'CDM_CTCALLTRACEINFO_PRC_NEW Fail!'||substr(dbms_utility.format_error_stack,1,200);
commit;
RETURN;
end TestMoreDBMSOutPut;
运行测试
解决方案:
1. 关闭输出 DBMS_OUTPUT.DISABLE
2. 设置很大缓存区 DBMS_OUTPUT.ENABLE(999999999999999999999)