我可以在调用oracle程序后回滚吗?

时间:2016-05-31 10:10:14

标签: oracle stored-procedures rollback

我有procedure调用2内procedures,如果条件为真,我想rollback程序调用,这可能吗?

这个伪示范我想做的事情:

Create or Replace procedure Main

   Call procedure_1();
   Call procedure_2();

   IF X = true THEN
      ROLLBACK;
   END IF;

END Procedure Main;

1 个答案:

答案 0 :(得分:2)

您可以执行此操作Using SAVEPOINT With ROLLBACK

Create or Replace procedure Main

   SAVEPOINT sp_1;
   Call procedure_1();       
   Call procedure_2();

   IF X = true THEN
      ROLLBACK TO sp_1;
   END IF;

END Procedure Main;

注意:

如果您的存储过程中有DDL statements create\alter\drop\truncate etc..,则savepoint将无效,因为DDL语句在语句之前和之后发出commit。 / p>

您可以回滚到当前交易中定义的savepoint,发出savepoint后无法回滚到DDL statements/Commit