我正在制定一项要求。
有一个表。我想从这个表中删除一行但我无法删除它,因为
1.该表由79表通过外键关系引用 这79个表中的每一个都由其他100个表引用
所以你可以想象它的那种树结构。所以我需要从底部开始到达TOP。我需要通过SQL来实现它
所以我应该从哪里开始???我需要创建一个临时表或任何我可以做任何方法可以有用的东西???
注意:CASCADE DELETE NOT ALLOWED
我可能无法访问任何sys表..任何方法都可以派上用场???我正在使用oracle 10g
答案 0 :(得分: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;
答案 1 :(得分: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'