Oracle DML语句文件 - 执行,记录错误并继续而不中止

时间:2015-11-12 17:54:10

标签: sql oracle plsql oracle11g

我的文件包含INSERTsUPDATEsDELETEs。我想执行此文件中的每个DML语句,但是如果发生任何异常,我想打印该异常并继续。有一个简单的解决方案吗?下面是一个解决方案,它涉及将每个 DML包装在一个匿名块中并打印异常,但我认为它不够简单(或优雅):

BEGIN
  <<DML statement goes here>>
EXCEPTION
  WHEN OTHERS THEN 
  DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END;

毋庸置疑,数百种DML无法轻松完成。

1 个答案:

答案 0 :(得分:3)

可能的决定是在语句中添加错误记录子句。对于您的每个语句,您必须添加以下内容(例如INSERT):

insert into my_table (...)
values (...)
LOG ERRORS INTO err$_my_table ('INSERT') REJECT LIMIT UNLIMITED;

此处err$_my_table是用于错误记录的表。要创建它,请执行以下操作(每个表一次):

begin
  DBMS_ERRLOG.CREATE_ERROR_LOG ('MY_TABLE');
end;
/

错误日志记录子句禁止任何异常,并将错误记录表中的所有行放入,这会引发异常。执行后,您可以查询这些表。它们还包含SQLCODESQLERRM函数的值。此方法的缺点 - 您需要更改所有语句并为每个表创建日志记录表 更多关于documentation中的条款。