Oracle根據主鍵查詢外來鍵

zhenghaishu發表於2016-01-25

需求:

假如以前建立了兩個有外來鍵關聯的表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';

因為建主鍵名時沒有指定具體的名稱,所以這裡得到的系統給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部落格 ” ,連結:http://blog.itpub.net/29485627/viewspace-1982186/,如需轉載,請註明出處,否則將追究法律責任。

相關文章