Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 delete returning  [new]
Пгуые123
Guest
День добрый!
Помогите, кто может с вопросиком...
Как удалить записи из таблицы с внешним ключем, условия для которой формируются на основе таблицы, чей этот внешний ключ... ((( чет вроде этого..
delete from t_table t
where t.id in (select id from t_table_ext  te
                   where te.summ>1000)
но удалить так естественно не получается, тк в t_table есть внешний ключ на таблицу t_table_ext.
Как делаю сейчас:
for i in (select id from t_table_ext  te
                   where te.summ>1000)
loop
delete from t_table_ext  te
where te.id=i.id;
commit;

delete from t_table t
where t.id=i.id;
commit;
end loop;
естественно, выполняется ужастно долго...
пробывал делать несколько по другому, через execute immediate, генерируя запрос с in.
чет тоже не нравится....
Пробывал делать с returning... тоже получается удалять только по одной строчке... (((
Подскажите, куда смотреть? как быть? Да как вообще люди делают?
20 фев 07, 16:57    [3811812]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
on delete cascade
20 фев 07, 16:58    [3811818]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116210
Как вариант on delete cascade,
как вариант задание констрейнтов как deferrable ,
установка их в deferred и удаление записей из таблиц в любом порядке.
Ну и естественно без курсоров, в чистом SQL...
20 фев 07, 17:01    [3811840]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Пгуые123

ON DELETE CASCADE?
20 фев 07, 17:02    [3811851]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
ну или
1) select for update (вместо delete) мастера
2) дилит детальки
3) дилит мастера
20 фев 07, 17:09    [3811903]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
кстати а зачем два commit в исходном коде?
20 фев 07, 17:11    [3811927]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
Пгуые123
Guest
alex-ls
кстати а зачем два commit в исходном коде?

а не надо?
ну в ролл бек сегмент лишний раз записывать не будет..
или не так?
20 фев 07, 17:16    [3811963]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Пгуые123
ну в ролл бек сегмент лишний раз записывать не будет..
Бр... :(

Хотя бы то, что у Вас могут появиться несогласованные данные в таблицах - не тревожит? Представьте себе raise после первого коммита...
20 фев 07, 17:27    [3812035]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
Пгуые123
alex-ls
кстати а зачем два commit в исходном коде?

а не надо?
ну в ролл бек сегмент лишний раз записывать не будет..
или не так?

читайте Тома Кайта
20 фев 07, 17:33    [3812084]     Ответить | Цитировать Сообщить модератору
 Re: delete returning  [new]
Пгуые123
Guest
alex-ls
on delete cascade

ДА!
Это то, что надо )))
УРА! УРА! УРА!
20 фев 07, 22:38    [3813100]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить