ORACLE захватить объект исключения
Привет, есть ли способ захватить объекты (например, таблицы и столбцы), где исключение было брошено в ORACLE?
Мне нужно определить имя объекта, чтобы настроить сообщение об ошибке, показывающее пользователю имя таблицы и поле, где произошло исключение.
Я знаю, что есть переменные SQLCODE и SQLERRM, но мне интересно, есть ли какая-либо дополнительная переменная или функция, которая возвращает мне имя объекта ошибки.
я хочу что-то подобное
exception
when others then
begin
if SQLCODE = -20010
then dbms_output.put_line('The Value Too Large in the field ' || GetObjectNameError);
end if;
end;
ОБНОВИТЬ
используя пример Тони
CREATE TABLE t (v varchar2(3));
COMMENT ON TABLE t IS 'my table description';
COMMENT ON COLUMN t.v IS 'my column description';
insert into t values ('xxxx');
На самом деле поднять эту ошибку *
ERROR at line 1:
ORA-12899: value too large for column "MYSCHEMA"."T"."V" (actual: 4, maximum: 3)
Я хочу показать что-то вроде этого
ORA-12899: value too large for column "my column description" in table "my table description" (actual: 4, maximum: 3)
заранее спасибо.
3 ответа
Нет, нет Но более поздние версии Oracle (по крайней мере, 10G) делают это для вас со своими собственными исключениями:
SQL> create table t (v varchar2(3));
Table created.
SQL> insert into t values ('xxxx');
insert into t values ('xxxx')
*
ERROR at line 1:
ORA-12899: value too large for column "MYSCHEMA"."T"."V" (actual: 4, maximum: 3)
Чтобы получить то, что вы ищете, вы можете проанализировать эту ошибку, чтобы получить имена таблиц и столбцов (в этом примере T и V), а затем найти комментарии от USER_TAB_COMMENTS и USER_COL_COMMENTS и пересоздать сообщение, используя их.
Нет.
Что ж, метод lift_application_exception() позволяет вам два элемента: код ошибки и одно текстовое сообщение. Если вы создаете свои собственные исключения, вы можете отформатировать сообщение, чтобы оно содержало эту информацию, и проанализировать ее.
Альтернатива состоит в том, чтобы поместить эту информацию в глобальную таблицу ошибок, а затем вызвать исключение.
Чтобы прокомментировать комментарий ниже, оракул 10G включает в себя:
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
Это позволяет вам анализировать множественные ошибки. Этот пост в блоге показывает, как анализировать эту информацию, чтобы извлечь больше и лучше информации из стека вызовов. Но это все еще требует анализа сообщений об ошибках, а не ваших собственных.
Да, вы можете сделать это, но только для местоположений исходного кода. Проверять, выписываться Dbms_Utility.Format_Error_Stack()
а также Dbms_Utility.Format_Call_Stack()
,
Вы получаете строку, содержащую номер (а) строки и имя (и) объекта фрагмента (ов) PL/SQL, где произошла ошибка.