Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 将事务放入存储过程以取消所有操作_Oracle_Plsql - Fatal编程技术网

Oracle 将事务放入存储过程以取消所有操作

Oracle 将事务放入存储过程以取消所有操作,oracle,plsql,Oracle,Plsql,我有一个oracles存储过程,它执行2个操作,删除然后更新。我的目标是更新应始终更新一行,如果更新更多行,我希望取消这两个操作,这是我尝试的事务 BEGIN BEGIN transaction trans; (here is delete query) (here is update query) IF SQL%ROWCOUNT > 1 THEN ROLLBACK TO tran; ELSE C

我有一个oracles存储过程,它执行2个操作,删除然后更新。我的目标是更新应始终更新一行,如果更新更多行,我希望取消这两个操作,这是我尝试的事务

BEGIN

  BEGIN transaction trans;
     (here is delete query)


      (here is update query)
     IF SQL%ROWCOUNT > 1 THEN
            ROLLBACK TO tran;
    ELSE
          COMMIT;
    END IF;
  END;

END;
但这会产生错误<代码>错误(5,23):PLS-00103:在预期以下情况之一时遇到符号“TRANS”:=。(@%;符号“:”已替换为“TRANS”以继续。


Oracle中有什么不正确的地方必须使用保存点,如下所示:

BEGIN 

SAVEPOINT tran;
     (here is delete query)


      (here is update query)
     IF SQL%ROWCOUNT > 1 THEN
            ROLLBACK TO tran;
    ELSE
          COMMIT;
    END IF;
END;
但是,对于我来说,您不清楚要回滚到哪里,可能
保存点传输;
应该放在
(这里是删除查询)
-这取决于您的要求。

尝试:

 BEGIN
        (here is delete query)

        (here is update query)
        IF SQL%ROWCOUNT > 1 THEN
            RAISE_APPLICATION_ERROR(-20001, 'rollbacked');
        END IF;
 END;

oracle中的存储过程在默认情况下是事务性的,如果您有两个查询(删除和更新),并且您希望同时中止这两个查询,则无需额外的
开始事务…
或类似的操作

是的,我希望同时中止这两个查询,这非常简单,谢谢!谢谢,我的要求是取消这两个查询。我做到了,再次感谢