查询表的外键关系
时间:2020-03-05 18:59:34 来源:igfitidea点击:
对于给定的表" foo",我需要一个查询来生成一组表,这些表具有指向foo的外键。我正在使用Oracle 10G。
解决方案
回答
这应该工作(或者接近):
select table_name from all_constraints where constraint_type='R' and r_constraint_name in (select constraint_name from all_constraints where constraint_type in ('P','U') and table_name='<your table here>');
回答
下载Oracle参考指南10G,其中介绍了数据字典表。
上面的答案很好,但请查看其他可能与约束有关的表。
SELECT * FROM DICT WHERE TABLE_NAME LIKE '%CONS%';
最后,获得Toad或者SQL Developer之类的工具,使我们可以在UI中浏览这些东西,我们需要学习使用表,但也应该使用UI。
回答
链接到Oracle数据库在线文档
我们可能需要浏览数据字典视图。它们具有前缀:
- 用户
- 全部
- 数据库管理员
样本:
select * from dictionary where table_name like 'ALL%'
继续Mike的示例,我们可能需要生成脚本来启用/禁用约束。我只修改了第一行中的"选择"。
select 'alter table ' || TABLE_NAME || ' disable constraint ' || CONSTRAINT_NAME || ';' from all_constraints where constraint_type='R' and r_constraint_name in (select constraint_name from all_constraints where constraint_type in ('P','U') and table_name='<your table here>');
回答
以下陈述应给孩子们及其所有后代。我已经在Oracle 10数据库上对其进行了测试。
SELECT level, main.table_name parent, link.table_name child FROM user_constraints main, user_constraints link WHERE main.constraint_type IN ('P', 'U') AND link.r_constraint_name = main.constraint_name START WITH main.table_name LIKE UPPER('&&table_name') CONNECT BY main.table_name = PRIOR link.table_name ORDER BY level, main.table_name, link.table_name