Oracle10gでprimaryキーの削除をした際にINDEXが残る問題


Oracle10gで、プライマリキーの削除をした際にINDEXが残ってしまい、再作成できない問題があったので対処方法をメモしておきます。

-------------------
ダメな例:

ALTER TABLE [テーブル名] DROP CONSTRAINT [プライマリキー名]

ALTER TABLE [テーブル名] ADD CONSTRAINT [プライマリキー名]

※INDEXが残っていて、エラーになる。

-------------------
良い例:

ALTER TABLE [テーブル名] DROP CONSTRAINT [プライマリキー名]
CASCADE DROP INDEX;

ALTER TABLE [テーブル名] ADD CONSTRAINT [プライマリキー名]
PRIMARY KEY(xxxx);

-------------------

9iでは「DROP CONSTRAINT プライマリキー」でも問題がなかったのですが、10gの場合は「CASCADE DROP INDEX」を書かないとindexが残ってしまい、新しいプライマリーキーが作成できません。

※この現象は10gにおいてDMPでインポートされたテーブルに対して操作した場合に起こるようです。ですので、環境によっては起こらない場合もあるので気づきにくいようです。