如何增加dbms_output缓冲区?

时间:2013-05-10 06:39:37

标签: sql oracle plsql oracle10g dbms-output

我试图通过dbms_output调试我的动态查询,但看起来查询字符串对于dbms_output缓冲区来说太长了。

我得到了:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_OUTPUT", line 148
ORA-06512: at line 1 

知道如何增加缓冲区大小吗?

3 个答案:

答案 0 :(得分:30)

您可以启用DBMS_OUTPUT并设置缓冲区大小。缓冲区大小可以在1到1,000,000之间。

dbms_output.enable(buffer_size IN INTEGER DEFAULT 20000);
exec dbms_output.enable(1000000);

检查 this

修改

根据Frank和Mat发布的评论,您也可以使用Null

启用它
exec dbms_output.enable(NULL);

buffer_size :缓冲信息量的上限(以字节为单位)。将buffer_size设置为NULL指定应该没有限制。最大大小为1,000,000,当用户指定buffer_size(NOT NULL)时,最小大小为2,000。

答案 1 :(得分:3)

当缓冲区大小变满时。您可以尝试以下几种方法:

1)将DBMS_OUTPUT缓冲区的大小增加到1,000,000

2)尝试过滤写入缓冲区的数据 - 可能有一个写入DBMS_OUTPUT的循环,而您不需要这些数据。

3)在代码中的各个检查点调用ENABLE。每次通话都会清除缓冲区。

DBMS_OUTPUT.ENABLE(NULL)默认为20000以实现向后兼容Oracle documentation on dbms_output

您还可以创建自定义输出display.something,如下面的代码段

create or replace procedure cust_output(input_string in varchar2 )
is 

   out_string_in long default in_string; 
   string_lenth number; 
   loop_count number default 0; 

begin 

   str_len := length(out_string_in);

   while loop_count < str_len
   loop 
      dbms_output.put_line( substr( out_string_in, loop_count +1, 255 ) ); 
      loop_count := loop_count +255; 
   end loop; 
end;

链接-Ref:Alternative to dbms_output.putline @ By:亚历山大

答案 2 :(得分:2)

你走了:

DECLARE
BEGIN
  dbms_output.enable(NULL); -- Disables the limit of DBMS
  -- Your print here !
END;