是否可以将 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。
我有几个与此相关的问题 -
是否可以使用集合或临时 table 来代替错误日志 table(使用 DBMS_ERRLOG.create_error_log 或手动 table)
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 COLLECT
和 FORALL
的批量 DML,可以选择将 SAVE EXCEPTIONS
放入集合中,然后读取来自内置集合 SQL%BULK_EXCEPTION
。检查 this post 了解更多。
我需要将记录(或任何其他 DML)插入 table - 但是在遇到错误记录的情况下,插入必须继续并且必须记录错误。
逻辑上我想到了使用 LOG ERRORS INTO a table。
我有几个与此相关的问题 -
是否可以使用集合或临时 table 来代替错误日志 table(使用 DBMS_ERRLOG.create_error_log 或手动 table)
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 COLLECT
和 FORALL
的批量 DML,可以选择将 SAVE EXCEPTIONS
放入集合中,然后读取来自内置集合 SQL%BULK_EXCEPTION
。检查 this post 了解更多。