21

我试图通过调试我的动态查询,但似乎查询字符串对于缓冲区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 

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

4

3 回答 3

40

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

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

检查这个

编辑

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

exec dbms_output.enable(NULL);

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

于 2013-05-10T06:47:07.043 回答
4

当缓冲区大小变满时。您可以尝试多种选择:

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

2)尝试过滤写入缓冲区的数据 - 可能存在写入 DBMS_OUTPUT 的循环,您不需要此数据。

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

DBMS_OUTPUT.ENABLE(NULL) 将默认为 20000 以实现向后兼容性 Oracle 文档关于 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 :替代 dbms_output.putline @ 作者:Alexander

于 2013-05-10T07:09:15.190 回答
3

干得好:

DECLARE
BEGIN
  dbms_output.enable(NULL); -- Disables the limit of DBMS
  -- Your print here !
END;
于 2015-03-26T13:04:01.930 回答