database - 对于 DML 操作中的错误记录,是否可以将错误记录到集合或临时表中?
问题描述
我需要将记录(或任何其他 DML)插入表中 - 但如果遇到错误记录,插入必须继续并且必须记录错误。
从逻辑上讲,我想到了使用 LOG ERRORS INTO 表。
我有几个与此有关的问题-
可以使用集合或临时表代替错误日志表(使用 DBMS_ERRLOG.create_error_log 或手动表创建)
LOG ERRORS INTO 是“在错误记录的情况下继续插入并返回错误记录的日志信息”方案的唯一方法吗?
3.如果在DML语句中使用了RETURNING INTO子句,LOG ERRORS INTO是否仍然有效?
谢谢!
解决方案
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 COLLECT
和FORALL
有一个选项可以 SAVE EXCEPTIONS
进入一个集合,然后从内置集合中读取SQL%BULK_EXCEPTION
。查看这篇文章以了解更多信息。
推荐阅读
- typescript - Ionic 4 通过一键事件播放带有嚎叫的单个音频
- video - ffmpeg 和 libx264 视频无法在视频播放器上播放
- node.js - 在一个应用程序中部署两台 Express 服务器
- node.js - 猫鼬中间件获取将被添加的文档
- c# - Windows 服务正常启动但未执行代码
- machine-learning - 决策树拆分策略
- javascript - Python 和 JavaScript 基本通信
- laravel - 十月CMS | 同一控制器中的动态 importExportConfig
- excel - 比较两个表并在 Excel 中创建一个组合表
- javascript - Javascript:使用 RegEx 读取 android 清单文件中的包