Принять или обработать откат в хранимой процедуре после вставки? - PullRequest
0 голосов
/ 03 мая 2018

Оптимальный способ обработки ошибки в хранимой процедуре, которая только делает вставки?

У меня есть такая процедура:

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), если только 1 из этих вставок выдает ошибку? Вернуть значение true, если все в порядке, или false, если произошла ошибка?

1 Ответ

0 голосов
/ 03 мая 2018

SQLERRM и SQLCODE Функции могут использоваться:

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;
...