2011-05-02 33 views
9

我正在更改數據庫中的約束,我需要刪除其中的一些約束。我知道,對於一個約束,命令如下:如何一次刪除多個約束(Oracle,SQL)

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name; 

然而,當我嘗試

ALTER TABLE tblApplication DROP (
    CONSTRAINT constraint1_name, 
    CONSTRAINT constraint2_name 
); 

它不工作,我需要做的:

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name; 
ALTER TABLE tblApplication DROP CONSTRAINT constraint2_name; 

有沒有辦法在單個命令中刪除多個約束?我想避免重複ALTER TABLE tblApplication,就像用ADD命令:

ALTER TABLE tblApplication 
    ADD { 
    CONSTRAINT contraint1_name FOREIGN KEY ... ENABLE, 
    CONSTRAINT contraint2_name FOREIGN KEY ... ENABLE, 
}; 
+0

測試在你的附加例子中,你已經使用花括號而不是括號。 – climmunk 2012-05-25 19:15:47

回答

20

當然可以。你只需要重複每個約束的「下降約束」。例如

alter table t1 
drop constraint fk1 
drop constraint fk2 
/

編輯:我測試了這與Oracle 11,它工作正常。不知道舊版本。

+0

也適用於10g。 – DCookie 2011-05-02 16:11:00

+0

公平地說,ALTER TABLE上的Oracle文檔是一個相當困難的閱讀。我花了一段時間才找到一個句子,表示允許多個drop條款。語法圖並沒有使它變得顯而易見,並且人們可能會認爲它不允許它。 – DCookie 2011-05-03 01:19:15

+0

謝謝,那就是我一直在尋找的。 – 2011-05-03 07:29:42

0

還有另外一種形式的下降相關的列約束在一個表中,也與CASCADE刪除列:

ALTER TABLE table1 DROP (columnName) CASCADE CONSTRAINTS; 

據上的Oracle 11g