是否可以将 DML 操作中的错误记录记录到一个集合或一个临时 table 中?

Is it possible to LOG ERRORS INTO - a collection or a temporary table- for erred records from a DML operation?

我需要将记录(或任何其他 DML)插入 table - 但是在遇到错误记录的情况下,插入必须继续并且必须记录错误。

逻辑上我想到了使用 LOG ERRORS INTO a table。

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

  1. 是否可以使用集合或临时 table 来代替错误日志 table(使用 DBMS_ERRLOG.create_error_log 或手动 table)

  2. LOG ERRORS INTO 是 "continue insert in case of erred records and return log info for erred records" 场景的唯一方法吗?

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

谢谢!

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

2 - 不,这不是 PL/SQL 中的唯一方法。您可以使用 BEGIN.. 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 COLLECTFORALL 的批量 DML,可以选择将 SAVE EXCEPTIONS 放入集合中,然后读取来自内置集合 SQL%BULK_EXCEPTION。检查 this post 了解更多。