1. 程式人生 > 其它 >獲取兩個時間之間的間隔_分享兩個Oracle實用sql--一鍵獲取表與表之間的主外來鍵關係...

獲取兩個時間之間的間隔_分享兩個Oracle實用sql--一鍵獲取表與表之間的主外來鍵關係...

技術標籤:獲取兩個時間之間的間隔

概述

最近有這麼一個需求:怎麼才可以知道指向某張表的外來鍵約束?如果用

select 'alter table '||table_name||' disable constraint '||constraint_name||';',u.* from user_constraints u where constraint_type='R'

and table_name='XX'; 查出來的只是表自己的外來鍵,那麼我們怎麼知道其他指向這張表的外來鍵呢?


約束檢視

有兩個資料字典檢視提供了約束的詳細資訊。USER_CONSTRAINTS和USER_CONS_COLUMNS.

一張表可能有也可能沒有約束,對於一張表的每一個約束在USER_CONSTRAINTS中都有一條記錄描述這個約束。包括約束應用到的表名稱。如果你知道約束名想知道約束型別,查詢USER_CONSTRAINTS表。這個檢視描述了約束的定義。它不提供約束定義在哪些欄位名稱上。USER_CONSTRAINTS中CONSTRAINT_NAME中表示約束名,如果建立表的時候沒有指定約束名,系統預設的約束名類似“SYS_C006274”這樣的一串字母。R_CONSTRAINT_NAME是外來鍵引用表主鍵的約束名。

CONSTRAINT_TYPE欄位中P:表示主鍵,R:表示外來鍵,C表示NOT NULL或CHECK,U表示UNIQUE。

在USER_CONS_COLUMNS檢視中顯示約束的欄位名稱。如果主鍵是個聯合主鍵,這個檢視中將有這個約束的兩條記錄。聯合主鍵的每一個欄位對應一條記錄。每一條記錄通過POSITION(在聯合主鍵中的位置)來區別。可以根據CONSTRAINT_NAME欄位將USER_CONSTRAINTS和USER_CONS_COLUMNS關聯起來。

下面分享兩個關於外來鍵的sql..


查詢表本身的外來鍵

select u.owner, u.table_name, 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';', u.status from user_constraints u where constraint_type = 'R' and table_name = 'BULK_PLAN_MILESTONE';
19f56063caa1cdbee37f7cd2cb03012b.png

查詢表與表之間的主外來鍵關係

select a.owner "主鍵擁有者