我有一个调用 2 个内部procedures
的procedure
,如果条件为真,我想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;
注意:
如果存储过程具有类似createalterdroptruncate etc..
的任何DDL statements
,则savepoint
将无效,因为 DDL 语句在语句前后发出commit
。
您可以回滚到当前事务中定义的savepoint
,但不能在发出DDL statements/Commit
后回滚到savepoint
。