在 Oracle 中提交和回滚 DML 语句
Posted
技术标签:
【中文标题】在 Oracle 中提交和回滚 DML 语句【英文标题】:Commit and Rollback a DML statement in Oracle 【发布时间】: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 所以我想创建一个通用子程序,它提交有利条件并回滚不利条件。我希望我说清楚了谢谢你的回应。 【参考方案1】:假设您正在使用 PL/SQL,您可以使用 sql%rowcount
查看最新的 DML 语句是否对任何行产生了影响。
if sql%rowcount > 0 then commit; else rollback; end if;
请记住,您必须将这段代码放在 DML 语句之后,以便sql%rowcount
产生相关的受影响行数。
有关rownum
伪列here 的更多信息。
【讨论】:
以上是关于在 Oracle 中提交和回滚 DML 语句的主要内容,如果未能解决你的问题,请参考以下文章