|
|
|||||||||||||||||||||||||||||
|
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). Ссылки по теме
|
|