0

我正在处理一个需求。

有一个表。我想从该表中删除一行,但我无法删除它,因为

1.此表由 79 个表通过外键关系引用 2.这 79 个表中的每一个都由其他 100 个表引用

所以你可以想象它的树结构。所以我需要从底部开始,到达顶部。我需要通过 SQL 来完成

所以我应该从哪里开始???我需要创建一个临时表或任何我可以做任何有用的方法的东西???

注意:不允许级联删除

我可能无法访问任何系统表..任何可以方便的方法???我正在使用 oracle 10g

4

2 回答 2

2

见:http ://www.techonthenet.com/oracle/foreign_keys/disable.php

ALTER TABLE table_name
disable CONSTRAINT constraint_name;

请务必了解执行此类程序的后果以及它将对其他数据/应用程序功能产生的影响。

此外,如果不是很明显,请务必在之后启用约束

ALTER TABLE table_name
enable CONSTRAINT constraint_name;
于 2013-01-10T16:09:09.310 回答
0

您可以使用以下查询(不需要访问 sys 表)来获取表的所有外键及其对应的主键。您可以使用它来构建某种递归函数,该函数遍历您的树并删除所有父条目。

select uc.constraint_name, ucc.table_name, ucc.column_name from
user_constraints uc
left join user_cons_columns ucc on (uc.r_constraint_name = ucc.constraint_name)
where uc.table_name = 'TABLENAME'
and uc.constraint_type = 'R'
于 2013-01-10T16:16:12.487 回答