调用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
。
我有一个 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
。