需求:
假如以前创建了两个有外键关联的表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';