Для этого вы можете использовать функцию регистрации ошибок Oracle:
Сначала вам нужно создать таблицу, которая позже будет содержать пропущенные строки:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('YOUR_TABLE', 'YOUR_TABLE_ERROR_LOG');
Это создаст таблицу с именем YOUR_TABLE_ERROR_LOG
для таблицы с именем YOUR_TABLE
(очевидно, вам нужно сделать это только один раз).
Когда вы запускаете ОБНОВЛЕНИЕ, вам нужно добавить предложение LOG ERRORS
:
UPDATE your_table
SET ...
WHERE ...
LOG ERRORS INTO YOUR_TABLE_ERROR_LOG ('UPDATE running at '||to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS'))
REJECT LIMIT UNLIMITED;
Указанная строка является произвольным значением, которое помогает вам определить действие, которое вызвало ошибки.
После обновления вы можете запросить таблицу YOUR_TABLE_ERROR_LOG, чтобы узнать, какие ошибки произошли и почему.Если вас не интересуют ошибки, просто обрежьте таблицу ошибок в дальнейшем.
Подробнее см. В руководстве:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10008.htm#BCEFBFCD
Редактировать 2014-10-27
Начиная с Oracle 11.2, существует новая подсказка с именем CHANGE_DUPKEY_ERROR_INDEX
, которую можно использовать для этой цели.Хотя я никогда не пробовал этого.
Подробности в руководстве: http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDIFFJE
Для операций INSERT
есть похожая подсказка с именем IGNORE_ROW_ON_DUPKEY_INDEX
:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDEGDDG
Некоторые примеры: