2010-01-19 129 views
127

我有一個叫做users.SYS_C00381400的約束。我如何找到那個約束是什麼?有沒有辦法查詢所有約束?Oracle找到約束條件

+0

怎麼知道的約束?用戶.SYS_C00381400 – Vinay 2017-04-14 12:38:33

+0

約束名稱顯示在錯誤消息中。 – 2017-04-18 15:18:49

回答

195
select * from all_constraints 
where owner = '<NAME>' 
and constraint_name = 'SYS_C00381400' 
/

像所有的數據字典視圖,這是一個USER_CONSTRAINTS查看,如果你只是要檢查你的當前架構和管理用戶DBA_CONSTRAINTS視圖。

約束名稱的構造指示系統生成的約束名稱。例如,如果我們在表聲明中指定NOT NULL。或者確實是主要或唯一的關鍵。例如:

SQL> create table t23 (id number not null primary key) 
    2/

Table created. 

SQL> select constraint_name, constraint_type 
    2 from user_constraints 
    3 where table_name = 'T23' 
    4/

CONSTRAINT_NAME    C 
------------------------------ - 
SYS_C00935190     C 
SYS_C00935191     P 

SQL> 

'C'檢查,'P'爲主。

通常給關係約束一個明確的名字是一個好主意。例如,如果數據庫爲主鍵創建索引(如果該列尚未編入索引,它將執行索引),它將使用約束名稱o命名索引。您不希望數據庫充滿名爲SYS_C00935191的索引。

大多數人不打擾命名NOT NULL約束。

19

爲了獲得更詳細的說明(表/列引用的表/列),你可以運行下面的查詢:

SELECT uc.constraint_name||CHR(10) 
    ||  '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source 
    ,  'REFERENCES'||CHR(10) 
    ||  '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column 
FROM user_constraints uc , 
    user_cons_columns ucc1 , 
    user_cons_columns ucc2 
WHERE uc.constraint_name = ucc1.constraint_name 
AND uc.r_constraint_name = ucc2.constraint_name 
AND ucc1.POSITION  = ucc2.POSITION -- Correction for multiple column primary keys. 
AND uc.constraint_type = 'R' 
AND uc.constraint_name = 'SYS_C00381400' 
ORDER BY ucc1.TABLE_NAME , 
    uc.constraint_name; 

here

4

也許這可以幫助..

SELECT constraint_name, constraint_type, column_name 
from user_constraints natural join user_cons_columns 
where table_name = "my_table_name";