插入完成后,在存储过程中提交或处理回滚?

时间:2018-05-03 01:05:36

标签: oracle plsql oracle12c

处理只进行插入的存储过程中的错误的最佳方法吗?

我有一个这样的程序:

PROCEDURE INSERT_TO_TABLES (VAL1 IN NUMBER, VAL2 IN NUMBER, RESULT OUT NUMBER)
IS
BEGIN
    INSERT INTO TABLE_1 (A_COLUMN) VALUES (VAL1);
    INSERT INTO TABLE_2 (B_COLUMN) VALUES (VAL2);
    COMMIT;
END;

如果只有其中一个插件抛出错误,我怎样才能使这个存储过程足够优化以处理回滚并引发从应用程序捕获的异常(C#try / catch)?如果一切正常,则返回值true;如果发生错误,则返回false?

1 个答案:

答案 0 :(得分:0)

可以使用

SQLERRMSQLCODE函数:

CREATE OR REPLACE PROCEDURE INSERT_TO_TABLES (VAL1 IN NUMBER, VAL2 IN NUMBER, RESULT OUT 
NUMBER, RESULT_ERR OUT VARCHAR2 )
IS
 v_err_code number         := SQLCODE;   
 v_err_txt  varchar2(4000) := SQLERRM;
Begin
  Begin
    INSERT INTO TABLE_1 (A_COLUMN) VALUES (VAL1);
    INSERT INTO TABLE_2 (B_COLUMN) VALUES (VAL2);
   Exception When Others then                 
             RESULT_ERR := v_err_code||' '||v_err_txt;
  End;

  If ( nvl(v_err_code,0)<0 ) Then
    ROLLBACK;
  Else 
    RESULT_ERR :='Committed with success...';
    COMMIT;
  End If;
End;