Oracle根据主键查找外键

需求:

假如以前创建了两个有外键关联的表AB

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);

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

 

解决方案:

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

select constraint_name from user_constraints where table_name='A' and constraint_type ='P';
Oracle根据主键查找外键_第1张图片

因为建主键名时没有指定具体的名称,所以这里得到的系统给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');
Oracle根据主键查找外键_第2张图片

这里用到了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';

Oracle根据主键查找外键_第3张图片

 

 

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

转载于:http://blog.itpub.net/29485627/viewspace-1982186/

你可能感兴趣的:(Oracle根据主键查找外键)