我在 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
如果可以选择记录到服务器端文件,那么 UTL_FILE 是最好的选择。它不会抱怨缓冲区溢出。
DECLARE
v_MyFileHandle UTL_FILE.FILE_TYPE;
BEGIN
--Change the folder based on host operating System
v_MyFileHandle := UTL_FILE.FOPEN('C:\','LOG.TXT','a');
FOR i in 1..1000000
LOOP
UTL_FILE.PUT_LINE(v_MyFileHandle, ' Record written to file at ' || TO_CHAR(SYSDATE,'MM-DD-YY HH:MI:SS AM')||' is '||i);
END LOOP;
UTL_FILE.FCLOSE(v_MyFileHandle);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE
('ERROR ' || TO_CHAR(SQLCODE) || SQLERRM);
END;
您可以以只读模式打开该文件,并可以在脚本运行时看到写入记录的进度。这是一个额外的好处。
有关更多详细信息,值得阅读 oracle 文档:https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS72681 https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS72681
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)