2012-08-09 123 views
77

我已經爲在Oracle SQL中創建的多個表的每個約束定義了一個名稱。顯示Oracle中表的所有約束的名稱SQL

問題是,要刪除特定表的列的約束,我需要知道我爲每個約束提供的名稱,這些名稱都是我忘記的。

如何列出我爲表的每列指定的所有約束名稱?

有沒有這樣做的SQL語句?

回答

108

您需要查詢data dictionary,特別是USER_CONS_COLUMNS視圖來查看錶列和相應的約束:

SELECT * 
    FROM user_cons_columns 
WHERE table_name = '<your table name>'; 

僅供參考,除非你專門用小寫名字創建了表(使用雙引號),那麼表名將默認爲大寫,因此確保它在查詢中是如此。

如果然後希望看到有關約束的更多信息本身查詢USER_CONSTRAINTS觀點:

SELECT * 
    FROM user_constraints 
WHERE table_name = '<your table name>' 
    AND constraint_name = '<your constraint name>'; 

如果表中的模式是不是默認的模式舉行,那麼你可能需要更換的意見搭配:

all_cons_columns 

all_constraints 

添加where子句:

AND owner = '<schema owner of the table>' 
+0

錯字:'USER_CONS_COLUMNS' – 2013-09-25 03:54:56

+2

<我的表名>區分大小寫,我想;它應該是大寫。 – 2013-12-20 06:26:07

10
SELECT * FROM USER_CONSTRAINTS 
+2

這會不會讓你的列名 – 2013-10-02 08:43:58

6
select constraint_name,constraint_type 
from user_constraints 
where table_name = 'YOUR TABLE NAME'; 

注:表名稱應該是上限。

如果你不知道,則表的名稱,

select constraint_name,constraint_type,table_name 
from user_constraints; 
6

也許這可以幫助:

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

歡呼