【发布时间】:2016-10-03 14:53:57
【问题描述】:
在我的Oracle 数据库中,我希望从 2 个不同的表中删除行。
问题是,如果我先从 KENNEL 中删除行,那么我想在 DOG 表中删除的行找不到删除。
下面是我要从两个表中删除的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 次删除同时发生,并确保两个表中的行都被删除?
注意:我不能从 DOG 然后 KENNEL 中删除,因为 KENNEL 是必须首先删除的子记录。
【问题讨论】:
-
您可以简单地先从 DOG 中删除,然后从 KENNEL 中删除,并处理异常以在出现错误时回滚两个语句
-
我不能这样做,因为 DOG 和 KENNEL 之间存在约束,必须先删除 kennel,因为它是子记录
-
您的桌子上有哪些限制?请发布所有涉及约束的代码
-
为什么不能直接从 kennel 中删除,然后从 kennel 表中不存在 id 的 dog 中删除?这听起来是最简单的方法。这样,如果 kennel 表中仍有子记录,则在尝试从 dog 表中删除行时不会出错。或者,首先将 id 提取到集合或全局临时表 (GTT) 中,然后使用它作为删除的基础。
-
@Boneist 谢谢我试试看,或者我可以使用 join 语句从 2 个模式中执行删除吗?
标签: oracle transactions oracle-sqldeveloper sql-delete