Пользовательское исполнение с пользовательским сообщением

Хотите определить пользовательское сообщение для определенного пользователем исключения. Что у меня сейчас:

declare 
  e exception;
  pragma exception_init (e, -20100);
begin 
  raise e;
end;

ORA-20100: 
ORA-06512: at line 5

Что я хочу:

exec dbms_output.put_line(userenv('COMMITSCN'))

ORA-01725: USERENV('COMMITSCN')  not allowed here
ORA-06512: at "SYS.STANDARD", line 202
ORA-06512: at line 1

в строке "SYS.STANDARD", строка 202, мы видим:

raise USERENV_COMMITSCN_ERROR;

Исключение определено в спецификации как:

  -- Added for USERENV enhancement, bug 1622213.
  USERENV_COMMITSCN_ERROR exception;
    pragma EXCEPTION_INIT(USERENV_COMMITSCN_ERROR, '-1725');

Вопросы:

  1. Как определяется сообщение "USERENV('COMMITSCN') здесь не разрешено"?

  2. Как это сделать в моем коде?

Большое спасибо за ваши ответы!

1 ответ

Решение

Использование процедуры RAISE_APPLICATION_ERROR для создания исключения позволяет связать сообщение с ошибкой:

DECLARE
  e EXCEPTION;

  PRAGMA EXCEPTION_INIT (e, -20100);
BEGIN
  RAISE_APPLICATION_ERROR(-20100, 'This is the user-supplied message');
EXCEPTION
  WHEN e THEN
    DBMS_OUTPUT.PUT_LINE('Caught e: ' || SQLCODE || ' ' || SQLERRM);
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Caught something else: ' || SQLCODE || ' ' || SQLERRM);
END;

Документация здесь - в частности, прочитайте раздел под названием "Определение ваших собственных сообщений об ошибках: процедура RAISE_APPLICATION_ERROR".

Поделитесь и наслаждайтесь.

Другие вопросы по тегам