powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос про delete и fk
15 сообщений из 15, страница 1 из 1
Вопрос про delete и fk
    #39607865
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица A с полем A.id

Есть таблица B с полями id, header_id, a_id
Есть FK B.a_id => A.id

Нужно удалить записи из A запросом вида

delete from A where A.id in (select a_id from b where header_id=1);
update B set a_id=null where header_id=1;

но на delete срабатывает FK.

Можно ли такую тривиальную задачу решить SQL без временных таблиц и PL/SQL ?
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607870
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevно на delete срабатывает FK.SET NULL?
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607871
n0rd1c.c0ld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev , on delete set null ?
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607873
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятно, что можно FK сделать ON DELETE SET NULL

Но потребность выглядит уж больно стандартной. Может я чего не доглядел и можно чисто SQL изобразить?
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607877
фк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevМожет я чего не доглядел и можно чисто SQL изобразить?
Использовать отложенную проверку ограничений?
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607892
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям
Написать PL/SQL цикл - не проблема

просто подумал, может есть какие-то хитрые команды типа MERGE ))), а я темный о них не знаю

Удалить из нескольких таблиц сразу вроде можно, а вот удалить и зачистить - не нашел
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607919
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНо потребность выглядит уж больно стандартной.Ага. Для SET NULL.
Leonid KudryavtsevМожет я чего не доглядел и можно чисто SQL изобразить?Предпочитающие идти своим путём могут попробовать трюк навроде:
Код: plsql
1.
2.
update tab n set a_id = null where ... returning (select o.a_id from tab o where o.rowid = a.rowid) bulk collect into ...;
delete ...;
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607923
n0rd1c.c0ld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям
А set constraint deferred ?
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607939
n0rd1c.c0ld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n0rd1c.c0ldLeonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям
А set constraint deferred ?
Глупость написал.
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607941
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n0rd1c.c0ldLeonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям
А set constraint deferred ?

ORA-02447 cannot defer a constraint that is not deferrable

))) всюду грабли. Сделал на PL/SQL. Но спасибо за информацию. Ни про ON DELETE SET NULL, ни про SET DEFERRED не знал

Код: plsql
1.
2.
3.
4.
for c in (select....)
   update ...
   delete ..
end loop;
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39607958
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev... запросом вида

delete from A where A.id in (select a_id from b where header_id=1);
update B set a_id=null where header_id=1;Выглядит некорректным, в после update в B могут остаться ссылки на A.

В предположении допущений по поводу критериев нужности записей A:
Код: plsql
1.
2.
update B set a_id=null where a_id in (select a_id from B where header_id=1);
delete from A where not exists (select 1 from B where B.a_id = A.id);
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39608073
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

не могу понять зачем IN?

update B set a_id=null where a_id in (select a_id from B where header_id=1);


.....
stax
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39608099
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да не зачем, просто copy-past не глядя )))
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39608166
Staxне могу понять зачем IN?

update B set a_id=null where a_id in (select a_id from B where header_id=1);
сравни in (... header_id = 1) и непосредственный header_id = 1id a_id header_id101 10 0101 10 1
...
Рейтинг: 0 / 0
Вопрос про delete и fk
    #39608313
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всего две строкиStaxне могу понять зачем IN?

update B set a_id=null where a_id in (select a_id from B where header_id=1);
сравни in (... header_id = 1) и непосредственный header_id = 1id a_id header_id101 10 0101 10 1

ясно, чет проморгал (ступил) етот момент

хотя, судя по первому посту, еще вопрос нужно ли ето Leonid-у Kudryavtsev-у

....
stax
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос про delete и fk
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]