ITPub博客

首页 > 数据库 > Oracle > Oracle根据主键查找外键

Oracle根据主键查找外键

原创 Oracle 作者:zhenghaishu 时间:2016-01-25 20:59:39 0 删除 编辑

需求:

假如以前创建了两个有外键关联的表A和B:

create table A(id number(3) primary key, name varchar2(10));

create table B(id number(3), sex varchar2(1));

alter table B add constraint fk_id foreign key(id) references A(id);

过了一段时间后忘了当初把哪个表的哪个字段设成A表id字段的外键,要求查出该外键所对应的列名和表名。

 

解决方案:

(1)首先查询A表的主键名称:

select constraint_name from user_constraints where table_name='A' and constraint_type ='P';

因为建主键名时没有指定具体的名称,所以这里得到的系统给A表分配的主键名称为SYS_C0023469

 

(2)接着在上一步的基础上查找外键对应的表名和列名:

select table_name,constraint_name,constraint_type from user_constraints where r_constraint_name = (select constraint_name from user_constraints where table_name='A' and constraint_type ='P');

这里用到了r_constraint_name。假如表B中的某个外键为表A的主键,则有B.r_constraint_name=A.constraint_name。


(3)知道了表名和外键约束名后,就很容易从user_cons_columns中查找列名:

select column_name from user_cons_columns where table_name='B';

或

select column_name from user_cons_columns where constraint_name='FK_ID';


 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29485627/viewspace-1982186/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-14

  • 博文量
    112
  • 访问量
    1057344