網頁

2020/4/16

Oracle 查詢外鍵依賴 find foreign key constraints

Oracle查詢schema的全資料表的外鍵限制(foreign key constraints)的方法如下。

使用下面sql查詢ALL_CONSTRAINTS找出schema 'ABC'的全部資料表的外鍵限制(foreign key constraints)及依賴關係(foreign key dependencies)。

SELECT
    a.TABLE_NAME "REF_TABLE", -- 被參照的表
    b.TABLE_NAME "REF_BY",    -- 參照的表
    b.CONSTRAINT_NAME "FK"  -- 外鍵名稱
FROM ALL_CONSTRAINTS a, ALL_CONSTRAINTS b 
WHERE b.CONSTRAINT_TYPE = 'R' -- Referential integrity
AND a.OWNER = 'ABC' -- schema名稱(使用者名稱)
AND b.OWNER = 'ABC' -- schema名稱(使用者名稱)
AND a.CONSTRAINT_NAME = b.R_CONSTRAINT_NAME
ORDER BY a.TABLE_NAME;

例如資料庫有兩資料表DEPARTMENTEMPLOYEE。外鍵EMPLOYEE.DEPARTMENT_ID參照至DEPARTMENT.ID則以上sql查詢結果為:

+------------+----------+---------+
| REF_TABLE  | REF_BY   | FK      |
+------------+----------+---------+
| DEPARTMENT | EMPLOYEE | FK_D_ID |
+------------+----------+---------+

若只要查詢指定資料表的外鍵限制,使用以下sql:

SELECT
    a.TABLE_NAME "REF_TABLE", -- 被參照的表
    b.TABLE_NAME "REF_BY",    -- 參照的表
    b.CONSTRAINT_NAME "FK"
FROM ALL_CONSTRAINTS a, ALL_CONSTRAINTS b 
WHERE b.CONSTRAINT_TYPE = 'R'
AND a.OWNER = 'ABC' -- schema名稱(使用者名稱)
AND b.OWNER = 'ABC' -- schema名稱(使用者名稱)
AND a.CONSTRAINT_NAME = b.R_CONSTRAINT_NAME
AND b.TABLE_NAME IN ('DEPARTMENT') -- 填入要查看的資料表名稱
ORDER BY a.TABLE_NAME;

沒有留言:

張貼留言