web-dev-qa-db-ja.com

一度に複数の制約を削除する方法(Oracle、SQL)

データベースの制約を変更しているので、それらのいくつかを削除する必要があります。単一の制約の場合、コマンドは次のとおりです。

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name;

しかし、私がしようとすると

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

それは機能せず、私はする必要があります:

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

1つのコマンドで複数の制約を削除する方法はありますか? ADDコマンドの場合と同様に、ALTER TABLE tblApplicationを繰り返さないようにしたいと思います。

ALTER TABLE tblApplication ADD (
  CONSTRAINT contraint1_name FOREIGN KEY ... ENABLE,
  CONSTRAINT contraint2_name FOREIGN KEY ... ENABLE,
  CONSTRAINT contraint3_name FOREIGN KEY ... ENABLE
);
12
John Manak

はい、できます。制約ごとに「ドロップ制約」を繰り返す必要があります。例えば.

alter table t1
drop constraint fk1
drop constraint fk2
/

編集:これをOracle 11に対してテストしましたが、正常に機能しました。古いバージョンについてはわかりません。

23
Sodved

テーブル内の列に関連する制約を削除し、CASCADEを使用して列を削除する別の形式があります。

ALTER TABLE table1 DROP (columnName) CASCADE CONSTRAINTS;

Oracle11gでテストされています

1
Jordi M.