删除具有外键约束的行

时间:2013-01-10 15:56:58

标签: oracle plsql

我正在制定一项要求。

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

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

所以你可以想象它的那种树结构。所以我需要从底部开始到达TOP。我需要通过SQL来实现它

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

注意:CASCADE DELETE NOT ALLOWED

我可能无法访问任何sys表..任何方法都可以派上用场???我正在使用oracle 10g

2 个答案:

答案 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'