我正在处理一个需求。
有一个表。我想从该表中删除一行,但我无法删除它,因为
1.此表由 79 个表通过外键关系引用 2.这 79 个表中的每一个都由其他 100 个表引用
所以你可以想象它的树结构。所以我需要从底部开始,到达顶部。我需要通过 SQL 来完成
所以我应该从哪里开始???我需要创建一个临时表或任何我可以做任何有用的方法的东西???
注意:不允许级联删除
我可能无法访问任何系统表..任何可以方便的方法???我正在使用 oracle 10g
见: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;
您可以使用以下查询(不需要访问 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'