如何强制oracle执行级联删除而不删除/重新创建约束

时间:2012-12-14 15:19:17

标签: sql oracle cascade

我有一个父表,它有一个引用它的dosen子表。 这些子表又具有引用它们的其他子表。等等。

我需要从主父表中删除一行,将其一直向下级联。

在整个地方删除/重新创建约束以使它们“ON CASCADE DELETE”不是一个选项

完成所有操作并手动删除子行是一场噩梦。

还有其他选择吗?

2 个答案:

答案 0 :(得分:27)

DELETE语句没有参数使其级联。

因此,您可以使用ON CASCADE DELETE的用户,也可以按正确的顺序执行一系列单独的删除操作。

您可以编写一个“智能删除”程序来调查表结构,并根据该结构生成一系列删除操作,但这可能比编写单独的删除更多的工作和更多的噩梦。并且你 要使这些约束起作用,实际上并不总是如此。

答案 1 :(得分:0)

我在oracle中用一个应用程序解决了这种问题,我有意将数据从一个分支合并到另一个分支 - 目标,然后删除源代码。

https://sites.google.com/site/keytreechanger/Home https://sites.google.com/site/keytreechanger/Home/screenshots

引用

  

鉴于此错误,例如:   客户端Pedrus Root(内部密钥表示#R = 111)与Petrus Root相同(#R = 222)。   将222下的数据移动到111,然后删除222分支   KTC以一种聪明的方式从所有相关的数据库表中收集与此案例相关的所有数据(以及接下来要解决的几个案例)。
  该算法仅在需要的地方搜索并使用所有可用的关键组件   为审计目的,本地维护所有数据的备份。本地存储库透明地演变以适应表/字段定义中的更改。

     

超级用户在视觉上检查表/关系树,可以在任何表格中查看/打印/编辑数据,并可选择修改假定的操作(剪切,剪切,粘贴或完成)。
  最后,KTC生成数百行插入,更新和删除纠正代码以解决此特定情况,以合适的顺序列出,以结尾       从rootTable删除,其中#R = 222   然后,我在线申请代码。

在您的情况下,过滤器必须删除除删除行之外的所有行。

AFAIK市场上没有相应的应用。