ITPub博客

首页 > Linux操作系统 > Linux操作系统 > dbms_output.put_line的buffer问题

dbms_output.put_line的buffer问题

原创 Linux操作系统 作者:翻口皮 时间:2011-11-01 15:11:27 0 删除 编辑

今天跑一段代码,是一段检查业务数据是否正确的代码,如果发现有不正确的业务数据,就把它们用dbms_output.put_line打印出来。测试结果总是报buffer不足,即使修改了buffer也还是报不足,于是用一段简单的代码做个小实验:

数据库:oracle 11.1.0.7.0
客户端:pl/sql developer

------------------------------------------------------------
测试一:
 create or replace procedure sp_test_dbmsoutput_buffer is
 begin
   dbms_output.put_line( xxx );  --xxx处写了2001个字母a
 end sp_test_dbmsoutput_buffer;

 command窗口报错信息:
 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: 在 "SCOTT.SP_TEST_DBMSOUTPUT_BUFFER", line 4
 ORA-06512: 在 line 2
------------------------------------------------------------


------------------------------------------------------------
测试二:
稍微加了一行代码,代码变成:
 create or replace procedure sp_test_dbmsoutput_buffer is
 begin
   dbms_output.enable(null);
   dbms_output.put_line( xxx );  --xxx处写了2001个字母a
 end sp_test_dbmsoutput_buffer;

 这下在command窗口的输出中没有报错了,
 但是弹出了一个错误窗口,提示仍然是有错误的:
 ORA-06502:PL/SQL:数字或值错误: 字符串缓冲区太小
 ORA-06512:在"SYS.DBMS_OUTPUT", line 151
 ORA-06512:在 line 2
------------------------------------------------------------


没道理的,因为在 oracle 11g 的文档里已经写得很清楚了:
  The maximum line size is 32767 bytes.
  The default buffer size is 20000 bytes. The minimum size is 2000 bytes and the maximum is unlimited.
所以像dbms_output.enable(null)这句代码都是不必要的,只是一句死马当作活马医的代码,另外我和同事们也尝试了在set serveroutput on后面加上一个很大的size数值,也无济于事,只觉得文档上对dbms_output的说明都没啥用。
找了大半天都没找到错误原因,最后终于想到用sql*plus来测一下,而不是用pl/sql developer来测。
成功了,就直接用测试一的代码就可以成功了。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/710274/viewspace-710053/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-02-22

  • 博文量
    1
  • 访问量
    6630