Обработка исключений в pl / sql - PullRequest
5 голосов
/ 06 июня 2011

У меня есть хранимая процедура

create or replace procedure Trial
    is 
Begin
---Block A--
EXCEPTION
when others then
insert into error_log values('error');
--Block A ends----
--Block B ----
----Block B ends---
end;

Я хочу, чтобы код в блоке B выполнялся во всех условиях, т. Е. Возникает ли исключение в блоке A или нет. С приведенным выше кодом блок B выполняется только в том случае, если исключение составляетподнял.Как это сделатьПожалуйста, помогите.

Ответы [ 2 ]

7 голосов
/ 06 июня 2011

Вы можете создавать вложенные блоки:

create or replace procedure Trial
    is 
Begin
  begin
    ---Block A--
  EXCEPTION
    when others then
      insert into error_log values('error');
  end;
  begin
    --Block B ----
  end;
end;
2 голосов
/ 06 июня 2011

Обратите внимание, что обычным антипаттерном является перехват всех исключений без их вызова. Возможно, вы также захотите рассмотреть автономную транзакцию, чтобы сохранить журнал ошибок после отката.

Так что вам, вероятно, будет лучше с чем-то вроде этого:

create or replace procedure Trial
is 

  procedure finally is
  begin
    --Block B ----
  end;

  procedure logerr (msg varchar2) is
    PRAGMA AUTONOMOUS_TRANSACTION;
  begin
    insert into error_log values(msg);
    commit;
  end;

Begin
  begin
    ---Block A--
  EXCEPTION
    when others then
      logerr(SQLERRM);
      finally;
      raise;
  end;

  finally;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...