在Oracle中提交并回滚DML语句

在Oracle中提交并回滚DML语句,oracle,commit,rollback,dml,Oracle,Commit,Rollback,Dml,我试图更新一个简单的语句 我想要的是: 如果是true则=>隐式提交(使用任何子程序) 如果为false=>则应隐式回滚(使用任何子程序) 示例: Update empcp set sal = sal +1000 where empid = 1; 如果它是trueelserollback,则它应该是committed 假设您正在使用PL/SQL,可以使用SQL%rowcount查看最新的DML语句是否对任何行产生了影响 if sql%rowcount > 0 then commit;

我试图更新一个简单的语句

我想要的是:

  • 如果是
    true
    则=>隐式提交(使用任何子程序)
  • 如果为
    false
    =>则应隐式回滚(使用任何子程序)
示例

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

如果它是
true
elserollback,则它应该是committed

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

if sql%rowcount > 0 then commit; else rollback; end if;
请记住,您必须将这段代码放在DML语句之后,以便
sql%rowcount
生成相关的受影响行数。
更多关于rownum伪列的信息。

你说的“它是真的”是什么意思?假设您运行更新,得到“3行更新”,您如何决定是否需要提交?如果不正确,则不会对DB进行更改,因为update语句不会更新任何行。因此,在语句之后进行提交。Hi-Aleksej“是真的吗?”意味着如果empid exist,则提交应通过任何过程或触发器完成(但在触发器中,由于它与DML语句一起工作,因此无法提交或回滚,我们可以使用pragma autonomy_事务)loannis Barakos您是对的,如果它不真实,DB中不会有任何更改。但是考虑到我不想将sal增加超过10%的情况,例如:更新empcp set sal=sal*10/100,其中empid=&empid。如果sal>500,则应回滚,否则应提交。在这里,我不知道empid,所以我想创建一个通用子程序,在有利条件下提交,在不利条件下回滚。我希望我说得很清楚,谢谢您的回复。