テーブル名・プライマリキー名の変更方法(インデックス名も併せて行う)
プライマリキーの制約名の変更方法
プライマリキー制約の名前を変えたい場合、
制約の名前とインデックスの名前を変更する必要がある。
(プライマリーキー制約を作成すると、暗黙に索引(インデックス)が作られる。
その際、インデックス名は制約名と同じ名前で作られている。)
//1、テーブルのコピー
CREATE TABLE T_HOGE_WK AS SELECT * FROM T_HOGE;
//2、元TBLの削除
DROP TABLE T_HOGE;
//3、テーブル名の変更
ALTER TABLE T_HOGE_WK RENAME TO T_HOGE;
//4、制約名の変更
ALTER TABLE T_HOGE RENAME CONSTRAINT PK_T_HOGE_WK TO PK_T_HOGE;
//5、インデックス名の変更
ALTER INDEX PK_T_HOGE_WK RENAME TO PK_T_HOGE;
//6、元TBLを参照していたVIEWの再コンパイル
// 省略も可。VIEWを参照した時点で自動コンパイルされるため。
ALTER VIEW V_HOGE COMPILE;
//補足 依存性のチェックを行うSQL。statusが”VALID”ならOK、”INVALID”ならNG
select object_name, object_type, status from user_objects where object_name ='V_HOGE';
// ***** 以下は、ロールバックする場合のSQL ***** //
//7、新しく作成したテーブルを削除。PARGE句を指定し、RESYCLEBINに保存しない。
DROP TABLE T_HOGE PARGE;
//8、FLASHBACKをしてRESYCLEBINに残っている2でDROPしたテーブルを復活させる。
FLASHBACK TABLE T_HOGE
//9、関連VIEWの再コンパイル(6と同じコマンドを実行)
ALTER VIEW V_HOGE COMPILE;
プライマリキー制約の名前を変えたい場合、
制約の名前とインデックスの名前を変更する必要がある。
(プライマリーキー制約を作成すると、暗黙に索引(インデックス)が作られる。
その際、インデックス名は制約名と同じ名前で作られている。)
//1、テーブルのコピー
CREATE TABLE T_HOGE_WK AS SELECT * FROM T_HOGE;
//2、元TBLの削除
DROP TABLE T_HOGE;
//3、テーブル名の変更
ALTER TABLE T_HOGE_WK RENAME TO T_HOGE;
//4、制約名の変更
ALTER TABLE T_HOGE RENAME CONSTRAINT PK_T_HOGE_WK TO PK_T_HOGE;
//5、インデックス名の変更
ALTER INDEX PK_T_HOGE_WK RENAME TO PK_T_HOGE;
//6、元TBLを参照していたVIEWの再コンパイル
// 省略も可。VIEWを参照した時点で自動コンパイルされるため。
ALTER VIEW V_HOGE COMPILE;
//補足 依存性のチェックを行うSQL。statusが”VALID”ならOK、”INVALID”ならNG
select object_name, object_type, status from user_objects where object_name ='V_HOGE';
// ***** 以下は、ロールバックする場合のSQL ***** //
//7、新しく作成したテーブルを削除。PARGE句を指定し、RESYCLEBINに保存しない。
DROP TABLE T_HOGE PARGE;
//8、FLASHBACKをしてRESYCLEBINに残っている2でDROPしたテーブルを復活させる。
FLASHBACK TABLE T_HOGE
//9、関連VIEWの再コンパイル(6と同じコマンドを実行)
ALTER VIEW V_HOGE COMPILE;