如何增加dbms_output缓冲区?

hsu*_*suk 17 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 
Run Code Online (Sandbox Code Playgroud)

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

Gop*_*rma 32

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

dbms_output.enable(buffer_size IN INTEGER DEFAULT 20000);
exec dbms_output.enable(1000000);
Run Code Online (Sandbox Code Playgroud)

检查一下

编辑

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

exec dbms_output.enable(NULL);
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以调用dbms_output.enable(NULL),它将缓冲区大小设置为无限制,请参阅http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_output.htm#i999293 (5认同)
  • @a_horse_with_no_name:我觉得10g变了."默认缓冲区大小为20000字节.最小大小为2000字节,最大值为无限制." http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_output.htm (2认同)
  • @a_horse_with_no_name刚试过它(10.2.0.4) - 将它设置为NULL允许我打印超过1,000,000:在declare i pls_integer上设置serveroutput; buf varchar2(1000)默认lpad('a',1000,'a'); begin dbms_output.enable(null); - 省略param导致缓冲区溢出开始于i .. 1001循环dbms_output.put_line(i); DBMS_OUTPUT.PUT_LINE(BUF); 结束循环; 别人然后dbms_output.put_line(SQLERRM); 结束; 结束; (2认同)