Oracle表关联查询咨询:如何查看表空间内表的主键外键关联
查询指定表空间表的外键与关联主键信息
当然可以!要获取final表空间内表的外键及其关联的主键信息,我们可以借助Oracle的数据字典视图来实现,下面是几个实用的查询语句:
1. 基础外键-主键关联关系(表级)
这个查询会列出final表空间中所有表的外键约束,以及对应的主键表和主键约束:
SELECT c.owner AS 外键表所有者, c.table_name AS 外键表名, c.constraint_name AS 外键约束名, c.r_owner AS 主键表所有者, c.r_table_name AS 主键表名, c.r_constraint_name AS 主键约束名 FROM all_constraints c JOIN all_tables t ON c.owner = t.owner AND c.table_name = t.table_name WHERE c.constraint_type = 'R' -- R代表外键约束 AND t.tablespace_name = 'FINAL' -- 指定目标表空间 ORDER BY c.table_name, c.constraint_name;
2. 字段级详细关联(外键字段对应主键字段)
如果需要看到具体哪些字段是外键,对应主键表的哪些字段,可以用这个查询:
SELECT c.owner AS 外键表所有者, c.table_name AS 外键表名, cc.column_name AS 外键字段名, c.r_owner AS 主键表所有者, c.r_table_name AS 主键表名, rc.column_name AS 主键字段名, c.constraint_name AS 外键约束名, c.r_constraint_name AS 主键约束名 FROM all_constraints c JOIN all_cons_columns cc ON c.owner = cc.owner AND c.constraint_name = cc.constraint_name JOIN all_cons_columns rc ON c.r_owner = rc.owner AND c.r_constraint_name = rc.constraint_name JOIN all_tables t ON c.owner = t.owner AND c.table_name = t.table_name WHERE c.constraint_type = 'R' AND t.tablespace_name = 'FINAL' ORDER BY c.table_name, cc.position;
补充说明
- 如果想要同时包含
final表空间作为主键表的关联(即其他表空间的表引用了该表空间的表作为主键),可以调整WHERE条件,把t.tablespace_name = 'FINAL'换成(t.tablespace_name = 'FINAL' OR EXISTS (SELECT 1 FROM all_tables rt WHERE rt.owner = c.r_owner AND rt.table_name = c.r_table_name AND rt.tablespace_name = 'FINAL')) - 注意表空间名在Oracle中默认是大小写敏感的,如果你的表空间名是小写,需要调整引号内的内容为小写。
内容的提问来源于stack exchange,提问作者codepurveyor
相关产品推荐
相关产品推荐

