日々常々

ふつうのプログラマがあたりまえにしたいこと。

テーブル名変更時のエラー

テーブル定義を変えたい時はALTER TABLEを使用します。テーブル名を変更したい時は以下のようにします。

ALTER TABLE <変更前テーブル名> RENAME TO <変更後テーブル名>

やってみましょう。

SQL> ALTER TABLE WORK.TEST_TABLE RENAME TO WORK.TEST_TABLE1;
ALTER TABLE WORK.TEST_TABLE RENAME TO WORK.TEST_TABLE1
                                          *
行1でエラーが発生しました。:
ORA-14047: ALTER TABLE|INDEX RENAMEは他の操作と結合できません

あれ?

「あれ?」じゃないですよ*1。テーブル名の変更なので、スキーマ内でしか通用しないってだけです。別スキーマのテーブル名を変えたい場合も、変更前だけ修飾して、変更後は名前だけ書けば良いのです。

SQL> ALTER TABLE WORK.TEST_TABLE RENAME TO TEST_TABLE1;

表が変更されました。

もしエラーになった書き方が許されるなら、スキーマ間のデータベースオブジェクトの移動が出来るということ。それならスキーマの整理も楽々だなーと思ったりもするのですが、データベースオブジェクトはスキーマと強く結びついているし、簡単にはいかないのでしょうね。

*1:即座に「ああ、変更後の名前はスキーマ修飾してはいけないんだな」と判るなら問題ないのですが、これが原因不明のバグ扱いされかける現場もあったりなかったり。