【问题标题】:Commit and Rollback a DML statement in Oracle在 Oracle 中提交和回滚 DML 语句
【发布时间】:2020-02-24 09:54:15
【问题描述】:

我正在尝试更新一个简单的语句。

我想要什么:

  • 如果是true then => committed 隐式(使用任何子程序);
  • 如果是false =>它应该回滚隐式(使用任何子程序)。

示例

Update empcp set sal = sal +1000 where empid = 1;

如果是true,则应该提交,否则回滚

【问题讨论】:

  • “这是真的”是什么意思?假设您运行更新,您得到“3 行更新”,您如何决定是否需要提交?
  • 如果它不正确,则不会对 DB 进行任何更改,因为更新语句不会更新任何行。所以在声明之后做一个提交。
  • 嗨,Aleksej “这是真的吗?”表示如果 empid 存在,则应通过任何过程或触发器完成提交(但在触发器中,由于它与 DML 语句一起工作,因此无法提交或回滚,我们可以使用 pragma automatic_transaction)
  • loannis Barakos 你是对的,如果它是不真实的,那么数据库中不会有任何变化。但是考虑到我不想将 sal 增加超过 10% 例如:update empcp设置 sal = sal*10/100 where empid = &empid .then 如果 sal > 500 它应该回滚,否则它应该提交。在这里我不知道 empid 所以我想创建一个通用子程序,它提交有利条件并回滚不利条件。我希望我说清楚了谢谢你的回应。

标签: oracle commit rollback dml


【解决方案1】:

假设您正在使用 PL/SQL,您可以使用 sql%rowcount 查看最新的 DML 语句是否对任何行产生了影响。

if sql%rowcount > 0 then commit; else rollback; end if;

请记住,您必须将这段代码放在 DML 语句之后,以便sql%rowcount 产生相关的受影响行数。 有关rownum 伪列here 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2019-06-22
    • 2020-07-22
    • 2013-07-16
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多