plsql代码中insert语句的异常处理

时间:2018-04-06 01:41:32

标签: sql oracle plsql plsqldeveloper

如果我的plsql代码中有3个插入语句。 我们假设它们为insert_1,insert_2,insert_3。 我的条件是:如果insert_1语句成功执行,则应自动执行insert_3,如果insert_3成功执行,则insert_1也应自动执行。

如果insert_1和insert_3都失败,那么只应执行insert_2。 请为此要求编写plsql代码。

1 个答案:

答案 0 :(得分:0)

您可以为此创建一个包:

创建一个包和内部包体,你可以尝试这样的东西。

create or replace PACKAGE BODY PKG_INSERT_QUERY AS
 P_ERR_CODE number;  

procedure finalPro
is 
begin 
    P_ERR_CODE := 0;

    insert into a values('a');
    commit;
    EXCEPTION WHEN OTHERS THEN ROLLBACK;
      DBMS_OUTPUT.PUT_LINE('ERROR ' ||SQLERRM);
      P_ERR_CODE := 1;

   if(P_ERR_CODE < 1 )then
      secondQ;
      IF(P_ERR_CODE < 1)  THEN
        thirdQ;
      END IF;
    END IF;  
end;

procedure secondQ
as 
begin
    insert into B values('B');
    commit;
    EXCEPTION WHEN OTHERS THEN ROLLBACK;
      DBMS_OUTPUT.PUT_LINE('ERROR ' ||SQLERRM);
      P_ERR_CODE := 2;
end;

procedure thirdQ
as 
begin
    insert into C values('C');
    commit;
    EXCEPTION WHEN OTHERS THEN ROLLBACK;
      DBMS_OUTPUT.PUT_LINE('ERROR ' ||SQLERRM);
      P_ERR_CODE := 3;
end;
end;