2011-05-02 5 views
9

estoy cambiando las restricciones en mi base de datos y tengo que soltar algo de ellos. Sé que para una única restricción, el comando es el siguiente:Cómo soltar más de una restricción a la vez (Oracle, SQL)

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name; 

Sin embargo, cuando intento

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

no funciona y tengo que hacer:

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

¿Hay alguna manera de eliminar más de una restricción en un solo comando? Me gustaría evitar la repetición de ALTER TABLE tblApplication, al igual que con el comando ADD:

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

En su ejemplo complemento se han utilizado llaves en lugar de paréntesis. – climmunk

Respuesta

20

Sí se puede. Solo necesita repetir 'drop constraint' por restricción. p.ej.

alter table t1 
drop constraint fk1 
drop constraint fk2 
/

Editar: Probé esto contra Oracle 11, y funcionó bien. No sé sobre versiones anteriores.

+0

Funciona en 10g, también. – DCookie

+0

Para ser justos, la documentación de Oracle sobre ALTER TABLE es una lectura bastante difícil. Me tomó un tiempo encontrar la oración que establece que se permiten múltiples cláusulas de exclusión. El diagrama de sintaxis no lo hace obvio del todo, y uno podría argumentar que no lo permite. – DCookie

+0

Gracias, eso es lo que estaba buscando. –

0

Hay una forma alternativa para dejar limitaciones relacionadas con una columna en una tabla, también dejando caer la columna con CASCADE:

ALTER TABLE table1 DROP (columnName) CASCADE CONSTRAINTS; 

Está probado en Oracle 11g

Cuestiones relacionadas