【发布时间】:2021-04-01 11:22:45
【问题描述】:
在 PL/SQL 中生成 100k 记录时出现以下错误。我创建了一个包并从匿名块调用该包。
Error report -
ORA-20000: ORU-10027: buffer overflow, limit of 100000 bytes
ORA-06512: at "SYS.DBMS_OUTPUT", line 32
ORA-06512: at "SYS.DBMS_OUTPUT", line 97
ORA-06512: at "SYS.DBMS_OUTPUT", line 112
ORA-06512: at "APPS.PJM_ECC_DATA_POPULATION", line 126
ORA-06512: at line 13
20000. 00000 - "%s"
*Cause: The stored procedure 'raise_application_error'
was called which causes this error to be generated.
我正在使用下面的行来打印日志
dbms_output.put_line('After pjm_project_params_pkg.insert_row: Row ID: ' || l_rowid);
我已经阅读了一些答案,他们建议在下面使用。
DBMS_OUTPUT.ENABLE(1000000)
我不知道我应该把同样的东西放在什么地方?它会解决问题吗? 我把下面放在我的匿名块中,但它没有帮助
set serveroutput on size 1000000
【问题讨论】:
-
你不能把“设置服务器输出”放在一个包里。它必须在客户端应用程序的 sqlplus 会话中设置
-
DBMS_OUTPUT.ENABLE() 将在 BEGIN 之后和对 DBMS_OUTPUT.PUT_LINE 的任何调用之前进入您的代码块。但你真正的问题是试图输出太多的文本。我只会在您想要跟踪的一小部分代码中使用它。另一种选择是插入到日志表中。
-
如果您在 Oracle 10.2 或更高版本中,您可以使用“set serveroutput on size unlimited”或“set serveroutput on”,这不应该在生产环境中完成,因为它会给你 ORA-0403 如果你超过了记忆。另一种选择是子串并显示一个较小的字符串。
标签: sql database oracle plsql oracle11g