这是一个场景,我正在编写一个对多个表执行DML(插入)操作的过程。如果出现异常,我需要从两个表的大部分表中回滚数据并删除新创建的表。
示例:
步骤{
1 create table1
2 insert into table2
3 insert into table3
Exception
WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(cur) THEN
DBMS_SQL.CLOSE_CURSOR(cur);
END IF;
RAISE;
}
现在的问题是,如果insert2在table2上失败,那么我也需要删除table1,如果insert3在table3上失败,那么我需要回滚已经发生在table2上的插入,并且还要删除table1。
我不确定如何在" Exception" pl-sql程序的一部分。任何帮助将受到高度赞赏。虽然我查看了这个Create oracle table with auto commit on,但这种情况并不匹配我的100%(虽然有点)。所有建议都将得到高度评价。
答案 0 :(得分:0)
根据问题和评论,使用SAVEPOINT
对于这种情况是一个好主意:
1 create table1;
SAVEPOINT SPT;
2 insert into table2;
3 insert into table3;
Exception
WHEN OTHERS THEN
--your code;
ROLLBACK TO SPT;
DROP TABLE table1;