在pl sql中进行异常处理时回滚和删除表

时间:2015-01-24 01:34:46

标签: oracle plsql

这是一个场景,我正在编写一个对多个表执行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%(虽然有点)。所有建议都将得到高度评价。

1 个答案:

答案 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;