Виноградов Василий
Дата: 05.12.2007 11:46:22
Oracle 10g, Express Edition
Хочу написать потоковое удаление из таблицы,на которую ссылается куча других. Чтобы не обвешиваться NOT EXISTS'ами, использую такую конструкцию
--------------------------------
DELETE FROM Table1 t
WHERE MONTHS_BETWEEN(SYSDATE, t.date_create) >=2 --удаляю все записи старше 2 мес.
log errors into ERR_Table1
reject limit 20
--------------------------------
Table1 создана в тестовых целях, так же создал еще несколько таблиц с foreign key'ями на нее(ON DELETE = NO ACTION), позаполнял все, запустил DELETE - все сработало четко. Когда ошибок меньше 20, все что могло, удалилось, все неудалившиеся появились в ERR_Table1
Теперь запускаю туже конструкцию на реальной таблице (пусть будет TABLE2), на которую ссылается порядка 15 других таблиц. Ощущение такое, что часть
--------------------------------
log errors into ERR_Table2 reject limit 20 --пробовал увеличить, ставил UNLIMITED
--------------------------------
я вообще не писал. Если DELETE проходит и без этого условия, то он проходит и с ним. Если в выборку попадает хоть одна запись, на кот. есть внешние ссылки, EXCEPTION и полный откат.
Внимание, вопрос:
Что это может быть? Бага оракла? Есть еще что-то, что нужно учесть или настроить? Как сделать удаление потоковым и с удобной обработкой ошибок?