首页 > 解决方案 > 对于 DML 操作中的错误记录,是否可以将错误记录到集合或临时表中?

问题描述

我需要将记录(或任何其他 DML)插入表中 - 但如果遇到错误记录,插入必须继续并且必须记录错误。

从逻辑上讲,我想到了使用 LOG ERRORS INTO 表。

我有几个与此有关的问题-

  1. 可以使用集合或临时表代替错误日志表(使用 DBMS_ERRLOG.create_error_log 或手动表创建)

  2. LOG ERRORS INTO 是“在错误记录的情况下继续插入并返回错误记录的日志信息”方案的唯一方法吗?

3.如果在DML语句中使用了RETURNING INTO子句,LOG ERRORS INTO是否仍然有效?

谢谢!

标签: databaseoracleplsqlerror-handlingerror-logging

解决方案


1 - 不能使用集合,并且将错误加载到临时表中与使用实际表相比没有优势。您可以通过传递一个选项来使用具有您选择的名称的错误表err_log_table_name DBMS_ERRLOG.CREATE_ERROR_LOG。因此,您的应用程序可以直接从表中读取,而不是使用集合。

2 - 不,这不是 PL/SQL 中的唯一方法。您可以使用 aBEGIN.. EXCEPTION END使用自主过程跳过错误。

LOOP
  BEGIN
  INSERT INTO .. --your insert statement that may cause error
  EXCEPTION
   autonomous_procedure_to_log_errors(error_params); 
                            --pass appropriate error messages 
                            --and table names
  END;
END LOOP

3 -RETURNING INTO可与LOG ERRORS INTO

我想补充的一点是,如果您希望使用 Bulk DMLBULK COLLECTFORALL有一个选项可以 SAVE EXCEPTIONS进入一个集合,然后从内置集合中读取SQL%BULK_EXCEPTION。查看这篇文章以了解更多信息。


推荐阅读