【发布时间】:2020-02-24 09:54:15
【问题描述】:
我正在尝试更新一个简单的语句。
我想要什么:
- 如果是
truethen => 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