【问题标题】:how to rollback the transaction of a stored Procedure calling in another procedure in db2如何回滚在 db2 中另一个过程中调用的存储过程的事务
【发布时间】:2015-08-28 10:40:15
【问题描述】:

我正在将一个存储过程调用到另一个存储过程中,现在如果第一个存储过程出现任何错误,那么我想回滚该存储过程的事务,因为 DB2 在调用完成后提交存储过程的事务。

那该怎么做呢?

【问题讨论】:

  • 您能否提供有关流程的详细信息?常规行为是内部存储过程的更改也会回滚。 DB2 也有所谓的“自治事务”,但您需要显式地让被调用的过程使用它。
  • 假设我将一个过程 A 调用到另一个名为 B 的过程中,所以如果现在如果过程 A 中发生任何错误,那么它将不会回滚,因为我在 B 中调用它。

标签: stored-procedures transactions db2


【解决方案1】:

根据您的描述,听起来您的应用程序执行CALL B()。而存储过程B执行CALL A()语句。

除非任何一个存储过程包含COMMIT 语句(这违背了最佳实践),否则由调用应用程序来确定CALL B() 语句是否成功,并决定是否发出COMMITROLLBACK 声明。执行ROLLBACK 应该回滚BA 所做的任何/所有更改。

【讨论】:

  • 实际上我正在将一个过程调用到另一个过程中,当我的父过程给出任何错误时,它不能回滚由我调用的子过程提交的事务,所以你知道如何回滚交易?
  • 请发布代码来演示正在发生的事情。
  • 我使用 db2 中的 atomic 自己解决它。谢谢
猜你喜欢
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多