哪個表包含有關約束的詳細信息(例如外鍵引用的表)?表'all_cons_columns','all_constraints'只包含那些不太有用的約束名稱。 我目前使用dbms_metadata.get_ddl(),但它不適用於所有的數據庫。查看Oracle有關主鍵/外鍵約束的元數據
謝謝。
哪個表包含有關約束的詳細信息(例如外鍵引用的表)?表'all_cons_columns','all_constraints'只包含那些不太有用的約束名稱。 我目前使用dbms_metadata.get_ddl(),但它不適用於所有的數據庫。查看Oracle有關主鍵/外鍵約束的元數據
謝謝。
它全部在那裏:ALL_CONSTRAINTS中的列R_CONSTRAINT_NAME包含引用的外鍵PK/UK約束的名稱。然後,您可以查找該約束來獲取參考表的TABLE_NAME。
查看ALL_CONS_COLUMNS時,外鍵中列的位置將與主鍵/唯一鍵中列的位置相匹配。
看一看:Reverse Engineering a Data Model。基於此,我做了一個Python program that dumps Oracle db schema to text。有PRIMARY_KEYS_INFO_SQL
和FOREIGN_KEYS_INFO_SQL
是你所感興趣的東西
有趣的鏈接。謝謝。 – ssr532 2010-07-09 09:44:26
本聲明列出的表,約束名稱和外鍵表名:
select c.table_name,c.constraint_name, --c.r_constraint_name,
cc.table_name
from all_constraints c
inner join all_constraints cc on c.r_constraint_name = cc.constraint_name
感謝您的查詢。 – ssr532 2010-07-09 09:44:11
爲了檢索外鍵,並生成一個腳本創建這些,你可以使用下面的查詢:
SELECT
'ALTER TABLE ' || a.table_name || ' ADD CONSTRAINT ' || a.constraint_name
|| ' FOREIGN KEY (' || a.column_name || ') REFERENCES ' || jcol.table_name
|| ' (' || jcol.column_name || ');' as commandforeign
FROM
(SELECT
uc.table_name, uc.constraint_name, uc.r_constraint_name, col.column_name
FROM
USER_CONSTRAINTS uc, USER_CONS_COLUMNS col
WHERE
uc.constraint_type='R' and uc.constraint_name=col.constraint_name) a
INNER JOIN
USER_CONS_COLUMNS jcol
ON
a.r_constraint_name=jcol.constraint_name;
duh。剛纔看到了。謝謝。 – ssr532 2010-07-09 09:43:45