在Oracle 9i中是否有一個命令顯示錶的外鍵以及這些外鍵引用的表?在Oracle 9i中顯示外鍵關係
我正在尋找,沒發現什麼,但我發現了一個等效的命令,該命令與MySQL的作品是SHOW CREATE TABLE
對此有Oracle的SQL內的等效命令?
我非常感謝您的回覆,但是我認爲這樣做的確很簡單,就像MySql一樣。
在Oracle 9i中是否有一個命令顯示錶的外鍵以及這些外鍵引用的表?在Oracle 9i中顯示外鍵關係
我正在尋找,沒發現什麼,但我發現了一個等效的命令,該命令與MySQL的作品是SHOW CREATE TABLE
對此有Oracle的SQL內的等效命令?
我非常感謝您的回覆,但是我認爲這樣做的確很簡單,就像MySql一樣。
這可以做你想做的事情,它使用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>';
您可以通過與其他表的任何引用約束沿列出所有的約束爲表開始:
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'前綴/後綴是典型的。
下面是另一個答案:dbms_metadata
包有一個函數可以返回表定義的DDL。
SELECT dbms_metadata.get_ddl('TABLE', '<table>', '<schema>') FROM dual;
這個包顯然已經可用,因爲甲骨文9.2
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_metada.htm#1656
如果您需要的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';
Yeesh ...你試圖幫助,看看你得到什麼。 – 2008-12-10 02:39:55
我收到以下錯誤消息: 錯誤在第7行: ORA-25154:USING子句的列部分不能有限定符 – 2008-12-10 03:27:32
我會用ON語法而不是USING來重寫此語句。 – 2008-12-10 03:31:22