如何在Oracle数据库中同时对2个表进行删除?

How to carry out deletions from 2 tables, at the same time in Oracle database?

在我的 Oracle 数据库中,我希望从 2 个不同的 table 中删除行。

问题是,如果我先从 KENNEL 中删除行,那么在 DOG table 中找不到要删除的行

下面是我要从两个 table 中删除的 SQL statements

DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
DELETE FROM DOG WHERE ID IN (SELECT DOG_ID FROM KENNEL WHERE COUNTRY_ID IS NULL);

如何解决此问题,以便 同时进行 2 次删除,并确保同时删除 table 中的行?

注意:我不能从 DOG 然后 KENNEL 删除,因为 KENNEL 是必须先删除的子记录。

UPDATE DOG SET [some non-key field] = 'XXX' WHERE ID IN (SELECT DOG_ID FROM KENNEL WHERE COUNTRY_ID IS NULL);

DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;

DELETE FROM DOG WHERE [non-key field] = 'XXX';

我会像这样执行这组删除操作:

-- delete rows from child table first
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;

-- now delete any parent rows that don't have any child records
DELETE FROM DOG WHERE ID not exists (SELECT DOG_ID FROM KENNEL);

这样做意味着如果 kennel table 中给定 dog_id 的 country_ids 并非全部为空,您就不会尝试删除父记录 -如果你尝试它会出错。