2011-05-02 72 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