我现在想创建一个存储过程,同时向两个表中新增数据,我的要求是:
1.这两个新增操作只能全部完成或全部失败,
2.当第一个新增操作失败,则弹出错误提示,并中止继续操作.
3.如果第一个新增操作成功,而第二个新增操作失败,则弹出错误信息,并取消第一个新增的操作.

解决方案 »

  1.   

    失败就rollback 两个都成功的情况下结束事物
      

  2.   

    create or replace procedure aa (o_msg out varchar2)is exp_tb1 EXCEPTION;
    exp_tb2 EXCEPTION;
    err_msg varchar2(100);
    begin 
      begin 
        
        err_msg:='insert table1 failed!';
        insert into table1 ...;    err_msg:='insert table2 failed!';
        
        insert into table2 ...;    err_msg:='insert OK!';    commit;
      EXCEPTION
          WHEN OTHERS THEN
            rollback;
            o_msg := err_msg || '(' ||SQLERRM||')';
            --dbms_output.put_line(v_step||v_msg);
        end;
    end aa;
      

  3.   

    刚才那两个异常变量没有用到:
    create or replace procedure aa (o_msg out varchar2)is err_msg varchar2(100);
    begin 
      begin 
        
        err_msg:='insert table1 failed!';
        insert into table1 ...;    err_msg:='insert table2 failed!';
        
        insert into table2 ...;    err_msg:='insert OK!';    commit;
      EXCEPTION
          WHEN OTHERS THEN
            rollback;
            o_msg := err_msg || '(' ||SQLERRM||')';
            dbms_output.put_line(o_msg);
        end;
    end aa;