データベースのテーブル定義を修正したら、いったんテーブルをDROP TABLEしてから、CREATE TABLEで作り直すことなどがよくあると思います。
でもこの時悩ましいのが、登録されているテーブルデータが消えてしまうこと。
ここで A5:SQL Mk-2 version 2.13.0 beta 35から、DROP TABLEの前にテンポラリテーブルを作ってデータを保存し、CREATE TABLEの後にテンポラリテーブルからデータをロード&テンポラリテーブル削除する機能を付けてみました。
以下のようにBackupToTempTable, RestoreFromTempTable 疑似命令を使います。
1 2 3 4 5 6 7 8 9 10 |
--* BackupToTempTable drop table TARGET_TABLE; --* RestoreFromTempTable CREATE TABLE TARGET_TABLE ( COL1 VARCHAR2(10) NOT NULL , COL2 VARCHAR2(20) , COL3 VARCHAR2(20) , PRIMARY KEY (COL1) ); |
このように書くことで、以下のような動きをします。
1.$$TARGET_TABLEという名前(現状では元テーブルの前に$$を付けた名前で固定)でテンポラリテーブルが作られ、TARGET_TABLEテーブルのデータが保存されます。
2.DROP TABLEが実行されます。
3.CREATE TABLEが実行されます。
4.$$TARGET_TABLEテーブルからTARGET_TABLEにデータが書き戻され、成功したら、$$TARGET_TABLEは削除されます。
注意点として$$TARGET_TABLEからTARGET_TABLEにデータが書き戻されるとき、同じ名前の列のみ書き戻されます。新しいテーブルの列の長さが短くなるなどして、書き戻すのに失敗する可能性があることに注意が必要かもしれません。
あと、テーブルのデータ量は考慮しないので、巨大なテーブルではバックアップ&リストアで大量のトランザクションが発生してデータベースに負荷をかけてしまう可能性も注意が必要かもしれません。
A5:SQL Mk-2 version 2.13.0 beta 35ではERエディタから生成するDDLにはこれらの疑似命令はつかないですが、生成するDDLに標準でこれを付けるようにすれば、結構便利かと思うのですがどうでしょう?。
1件のコメント
コメントをどうぞ →