LOG ERRORS (протоколировать ошибки)

Источник: akarak

В сервере Oracle Database 10 g Release 2 в операторах DELETE, INSERT, MERGE и UPDATE можно использовать новое предложение LOG ERRORS (протоколировать ошибки). Использование этого предложения в операторах массовой обработки данных позволяет записывать строки, при обработке которых произошли ошибки, и не откатывать весь этот оператор.

create table test_el(pole1 integer, pole2 varchar2(100));

exec dbms_errlog.create_error_log ('test_el','test_el_errlog');

Cоздание таблицы для сохранения записей, отклоненных DML-предложением.

test_el_errlog - создаваемая таблица для логов

test_el - исходная таблица

Выполним оператор, в поле POLE1 пытаемся внести символ 'g'

insert into test_el values ('g','что-то') log errors into test_el_errlog reject limit unlimited;

Вставлено: 0 строк

Как видим вставки не произошло.

А теперь посмотрим сдержимое таблицы test_el_errlog

select * from test_el_errlog;

ORA_ERR_NUMBER$  ORA_ERR_MESG$           ORA_ERR_ROWID$  ORA_ERR_OPTYP$ ORA_ERR_TAG$ POLE1 POLE2

---------------------------------  ---------------------------             -----------------------------   -----------------------------  ------------------------- ---------- -----------

1722                            ORA-01722: invalid number                                 I                                                        g          что-то

ORA_ERR_NUMBER$ - номер ошибки

ORA_ERR_MESG$ - который показывает сообщение об ошибке.

ORA_ERR_ROWID$ - заполняется идентификатором этой ROWID при UPDATE и DELETE

ORA_ERR_OPTYP$ - записывается операция при которой возникла ошибка

ORA_ERR_TAG$ - незнаю назначения

Все столбцы таблицы test_el

В таблицу test_el_errlog (некорректные записи для таблицы test_el) будут записываться все строки, которые нарушают ограничения; например, будут протоколироваться ошибки, вызванные слишком большими значениями столбцов, нарушениями ограничений целостности (ограничения NOT NULL, уникальности, ссылочной целостности и проверочные), ошибки,

возникающие при выполнении триггеров, ошибки преобразования типа столбца подзапроса к типу соответствующего столбца таблицы, ошибки распределения строк по секциям и некоторые ошибки при выполнении оператора MERGE (обновление со вставкой), например, ORA-30926: Unable to get a stable set of rows for MERGE operation - невозможно получить устойчивый набор строк для операции MERGE.

Когда возникает ошибка, строка, вызвавшая ее, протоколируется в таблице "некорректных записей" наряду с номером ошибки, текстом сообщения об ошибке, типом операции (INSERT, UPDATE или DELETE), а также с идентификатором этой строки ROWID (для операций UPDATE и DELETE).


Страница сайта http://185.71.96.61
Оригинал находится по адресу http://185.71.96.61/home.asp?artId=23190