调用oracle过程后可以回滚吗?

Can I rollback after calling oracle procedure?

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

这个伪演示我想做什么:

Create or Replace procedure Main

   Call procedure_1();
   Call procedure_2();

   IF X = true THEN
      ROLLBACK;
   END IF;

END Procedure Main;

你可以做到这一点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

您可以回滚到当前事务中定义的savepoint,您不能在发出DDL statements/Commit后回滚到savepoint