- 締切済み
続oracleのプライマリ・キー名の変更について
oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b という質問をさせて頂きました。 回答を頂き、一旦納得した気がしたのですが、どうもうまくいきません。 下記を実行すると4のところでコケます。 既にオブジェクトが存在するというものです。 どうやら 2のところのプライマリキー名変更がうまくいっていないか pk_table_aがどこかにゴミとして残っているように思えます。 オブジェクトブラウザというツールで見てみると、 CONSTRAINTにpk_table_bが INDEXのところにpk_table_aが見えています。 手順がおかしいのか? コマンドが間違えているのか? それともプライマリキー名の変更はしない方が良いのか? ここら辺を教えてください。 --1.TABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) / --2.プライマリキー名変更 ALTER TABLE table_a RENAME CONSTRAINT pk_table_a TO pk_table_b / --3.テーブル名変更 RENAME table_a TO table_b / --4.「1」と同じTABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) /
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- davosuke
- ベストアンサー率61% (34/55)
--1.TABLE 作成をやる前に DROP TABLE table_a CONSTRAINT PURGE をやってみてはどうですか??
お礼
まったく関係ないタイミングでしたが、レス付けて頂いたので自分の書いた内容を読み返して気付きました。 >オブジェクトブラウザというツールで見てみると、 >CONSTRAINTにpk_table_bが >INDEXのところにpk_table_aが見えています。 何の事はなく プライマリキー名変更を変更してもインデックス名が変更されないので、分離して残存するだけのようです。 インデックス名も別途変更すればOKでした。 ありがとう御座います。 --1.TABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) / --2.プライマリキー名変更 ALTER TABLE table_a RENAME CONSTRAINT pk_table_a TO pk_table_b / --3.インデックス名変更 ALTER INDEX pk_table_a RENAME TO pk_table_b / --4.テーブル名変更 RENAME table_a TO table_b / --5.「1」と同じTABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) /
補足
早速、ありがとう御座います。 「1.TABLE 作成」の工程はテストの為の工程で、 実際は既に存在するテーブルに対して行いますので、 「1.TABLE 作成」の工程の前に何かをするのは不可能です。