Пользовательское исполнение с пользовательским сообщением
Хотите определить пользовательское сообщение для определенного пользователем исключения. Что у меня сейчас:
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');
Вопросы:
Как определяется сообщение "USERENV('COMMITSCN') здесь не разрешено"?
Как это сделать в моем коде?
Большое спасибо за ваши ответы!
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".
Поделитесь и наслаждайтесь.