DBMS_OUTPUT 过多导致Oracle存储过程执行抛异常


DBMS_OUTPUT 是有缓存区上限的,默认为10000字节,当超过10000后会 抛"buffer overflow, limit of 10000 bytes" 的异常。

如下测试存储过程:

  1. create or replace procedure TestMoreDBMSOutPut(  
  2. countnum IN number,  
  3. logerrdes out varchar2  
  4. )  
  5. is  
  6. PrintStr varchar2(1000);  
  7. begin  
  8.          PrintStr := '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111';   
  9.            
  10.          for i in 1..countnum loop  
  11.          dbms_output.put_line(PrintStr);  
  12.          end loop;  
  13.          logerrdes := 'OK!';    
  14.          commit;  
  15. EXCEPTION  
  16.  WHEN OTHERS THEN  
  17.     rollback;  
  18.     logerrdes := 'CDM_CTCALLTRACEINFO_PRC_NEW Fail!'||substr(dbms_utility.format_error_stack,1,200);   
  19.     commit;  
  20.     RETURN;    
  21. end TestMoreDBMSOutPut;  

运行测试




解决方案:

1. 关闭输出    DBMS_OUTPUT.DISABLE

2. 设置很大缓存区  DBMS_OUTPUT.ENABLE(999999999999999999999)

相关内容