oracle – 在DML之后放置提交的效果是什么?

oracle – 在DML之后放置提交的效果是什么?,第1张

概述我在一个包中创建了一个过程,该过程在表中进行插入/删除,并且在成功完成事务之后,提交完成. 像这样: create or replace package pac is procedure pr_test(emp_id number)isbegin-- some codeif something then insertelse deletecommit;end pr_ 我在一个包中创建了一个过程,该过程在表中进行插入/删除,并且在成功完成事务之后,提交完成. @H_404_7@

@H_404_7@像这样:

@H_404_7@

create or replace package pac is    procedure pr_test(emp_ID number)isbegin-- some codeif something then  insertelse  deletecommit;end pr_test;end pac ;
@H_404_7@我应该将此交易作为autoNOMOUS_TRANSACTION吗?在程序中放置这样的提交有什么影响?

解决方法
@H_404_7@What is the effect of placing the commit like this in program?

@H_404_7@Oracle Documentation将COMMIT描述为:

@H_404_7@

@H_404_7@Purpose

@H_404_7@Use the COMMIT statement to end your current transaction and make
permanent all changes performed in the transaction. A transaction is a
sequence of sql statements that Oracle Database treats as a single
unit. This statement also erases all savepoints in the transaction and
releases transaction locks.

@H_404_7@如果你有三个PROCEDURE并且每个包含一个COMMIT语句,那么你就不能运行所有三个,如果在后一个中发生异常,则RolLBACK它们全部,因为前两个的变化已经被COMMITted.

@H_404_7@作为一般规则,您不应在PROCEDURE或FUNCTION中使用COMMIT,而应将其留给调用者COMMIT事务,以便他们可以将多个 *** 作捆绑在一起.

@H_404_7@当然,还有一些用例需要违反此规则,但您应该分别考虑每个案例,并在打破此规则之前花些时间充分了解业务逻辑,以便了解每个实例中的COMMIT.

@H_404_7@

@H_404_7@Should I make this transaction as autoNOMOUS_TRANSACTION?

@H_404_7@一个用例是日志记录 – 您可能有一个PROCEDURE调用另一个PROCEDURE来记录用户的 *** 作,无论初始 *** 作是成功还是失败,您都希望保留 *** 作日志并确保日志是COMMITted.在这种情况下,日志记录PROCEDURE应该是一个autoNOMOUS_TRANSACTION并包含一个COMMIT语句,而调用语句应该(可能)都没有.

@H_404_7@因此,如果一个PROCEDURE的COMMIT始终是必需的,并且与调用者是否COMMIT其他数据无关,则使PROCEDURE成为autoNOMOUS_TRANSACTION.如果PROCEDUREs可以捆绑在一起然后RolLBACK作为一个组,那么你不想让它们成为autoNOMOUS_TRANSACTIONs.

总结

以上是内存溢出为你收集整理的oracle – 在DML之后放置提交的效果是什么?全部内容,希望文章能够帮你解决oracle – 在DML之后放置提交的效果是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1152808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存