2008-12-10 73 views
3

在Oracle 9i中是否有一個命令顯示錶的外鍵以及這些外鍵引用的表?在Oracle 9i中顯示外鍵關係

我正在尋找,沒發現什麼,但我發現了一個等效的命令,該命令與MySQL的作品是SHOW CREATE TABLE

對此有Oracle的SQL內的等效命令?

我非常感謝您的回覆,但是我認爲這樣做的確很簡單,就像MySql一樣。

回答

1

這可以做你想做的事情,它使用Oracle系統視圖。但是,我沒有一個方便測試的Oracle實例。

SELECT fk.owner, fk.constraint_name, fk.table_name, fc.column_name, 
    pk.owner, pk.constraint_name, pk.table_name, pc.column_name 
FROM all_constraints fk 
JOIN all_cons_columns fc ON (fk.owner = fc.owner AND fk.constraint_name = fc.constraint_name) 
JOIN (all_constraints pk 
    JOIN all_cons_columns pc ON (pk.owner = pc.owner AND pk.constraint_name = pc.constraint_name)) 
ON (fk.r_owner = pk.owner AND fk.r_constraint_name = pk.constraint_name 
    AND fc.position = pc.position) 
WHERE fk.constraint_type = 'R' AND pk.constraint_type IN ('P', 'U') 
    AND fk.owner = '<schema>' AND fk.table_name = '<table>'; 
+0

Yeesh ...你試圖幫助,看看你得到什麼。 – 2008-12-10 02:39:55

+0

我收到以下錯誤消息: 錯誤在第7行: ORA-25154:USING子句的列部分不能有限定符 – 2008-12-10 03:27:32

+0

我會用ON語法而不是USING來重寫此語句。 – 2008-12-10 03:31:22

2

您可以通過與其他表的任何引用約束沿列出所有的約束爲表開始:

SELECT 
    acc.table_name 
    ,acc.column_name 
    ,acc.constraint_name 
    ,ac.r_constraint_name AS referenced_constraint 
FROM all_cons_columns acc 
INNER JOIN all_constraints ac ON (acc.constraint_name = ac.constraint_name) 
WHERE acc.table_name = UPPER('your_table_here'); 

如果你對你的約束合理的命名約定應該能夠識別這是外鍵,'FK'前綴/後綴是典型的。

0

如果您需要的DDL在未來的外鍵,那麼這裏就是答案提前:)

select 
    DBMS_METADATA.GET_DEPENDENT_DDL('REF_CONSTRAINT' ,atb.table_name, atb.owner) 
from 
    all_tables atb, all_constraints ac 
where 
    atb.owner = ac.owner and 
    ac.constraint_type = 'R' and 
    ac.table_name = atb.table_name and 
    atb.owner = 'YOURSCHEMA';