我有这样的场景:
Create Table Tmp_Test(id NUMBER);
CREATE OR REPLACE PROCEDURE Tmp_test_cmt
AS
BEGIN
SAVEPOINT A;
If (Some condition)
THEN
INSERT INTO Tmp_Test VALUES(2);
Other_SP_CALL;
Commit;
END IF
-- Further business logic --
COMMIT;
EXCEPTION
WHEN OTHER THEN
ROLLBACK TO SAVEPOINT A;
END;
我打算在我的SP内部进行中间提交,如果出现任何问题则回滚整个转换,否则最后执行转换。但是如果任何提交遭到攻击那么我就会收到错误" ORA-01086:savepoint' A'从未建立"
实际上我以前有SQL SERVER的经验,我们可以使用中间提交,但单个Rollback将撤消所有更改。
我也在PLSQL中计划这样做,以便进行中间提交并在出现问题时进行完全回滚。请建议如何实现这一目标。