问题描述
oracle 数据库中是否有任何方法可以定义触发器,如果指定的表发生更改,该触发器将在 COMMIT 之前同步触发(如果抛出异常,则为 ROLLBACK)?
Is there any way in oracle database to define trigger which will be fired synchronously before COMMIT (and ROLLBACK if it throws exception) in case when specified table is changed?
推荐答案
Oracle 中没有 ON COMMIT 触发机制.但是有一些解决方法:
There is no ON COMMIT trigger mechanism in Oracle. There are workarounds however:
您可以使用带有 ON COMMIT REFRESH 的物化视图并向该 MV 添加触发器.这将允许您在提交时修改基表时触发逻辑.如果触发器引发错误,事务将回滚(您将丢失所有未提交的更改).
You could use a materialized view with ON COMMIT REFRESH and add triggers to this MV. This would allow you to trigger the logic when a base table has been modified at the time of commit. If the trigger raises an error, the transaction will be rolled back (you will lose all uncommited changes).
您可以使用 DBMS_JOB 将操作推迟到提交之后.这将是一个异步操作,并且在某些情况下可能是可取的(例如,当您想在交易成功后发送电子邮件时).如果回滚主事务,作业将被取消.作业和主会话是独立的:如果作业失败,主事务将不会回滚.
You can use DBMS_JOB to defer an action to after the commit. This would be an asynchronous action and may be desirable in some cases (for example when you want to send an email after the transaction has been successful). If you roll back the primary transaction, the job will be cancelled. The job and the primary session are independent: if the job fails the main transaction will not be rolled back.
就您而言,您可能可以使用选项 (1).我个人不喜欢在触发器中编写业务逻辑,因为它增加了很多复杂性,但从技术上讲,我认为这是可行的.
In your case, you could probably use option (1). I personnaly don't like to code business logic in triggers since it adds a lot of complexity but technically I think it would be doable.
这篇关于如何在 Oracle 中定义触发器 ON COMMIT?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)