CREATE OR REPLACE TABLE の使用

CREATE TABLE ステートメントで OR REPLACE オプションを使用して、既存の表定義を変更できます。

CREATE OR REPLACE TABLE を使用すると、表のマスター定義を 1 つのステートメントに統合できます。元の CREATE TABLE ステートメントのソースに加えて、 最新バージョンの表を再作成するために必要な ALTER TABLE ステートメントの複雑なリストを保守する必要はありません。この CREATE TABLE ステートメントを実行して、 現行の表定義を新規表としてデプロイするか、旧バージョンの表を置き換えることができます。

表の既存データを保持するオプションと、 置換中に表からデータを消去するオプションがあります。デフォルトでは、すべてのデータが保持されます。 すべてのデータを消去することを選択する場合、新しい表定義は元バージョンと互換である必要はありません。すべてのケースで、 表に依存する他のオブジェクト (参照制約、トリガー、ビューなど) は引き続き満たされている必要があり、そうでないと置換は失敗します。

元の表が次のような基本的 INVENTORY 表であったとします。
CREATE TABLE INVENTORY 
      (PARTNO   SMALLINT NOT NULL,
       DESCR    VARCHAR(24),
       QONHAND  INT,
       PRIMARY KEY(PARTNO))
時間が経過するうちに、列名をより分かりやすいものに更新したり、 DESCR 列をより長い Unicode 列に変更したり、行が最後に更新された日時を示すためにタイム・スタンプ列を追加したりすることが考えられます。以下のステートメントは、こういった変更のすべてを反映したものです。 これを任意の旧バージョンの表に対して実行できるのは、列名を以前の列名と突き合わせることが可能で、データ・タイプが互換である場合に限ります。
CREATE OR REPLACE TABLE INVENTORY 
      (PART_NUMBER FOR PARTNO        SMALLINT NOT NULL,
       DESCRIPTION FOR DESCR         VARGRAPHIC(500) CCSID 1200,
       QUANTITY_ON_HAND FOR QONHAND  INT,
       LAST_MODIFIED FOR MODIFIED    TIMESTAMP
            NOT NULL GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,
       PRIMARY KEY(PARTNO))
CREATE OR REPLACE TABLE を使用して、区分化された表を変更できます。次の例では、1 つの区画が複数の区画に分割されます。

元の表は 3 つの区画を持つように定義されていたとします。

CREATE TABLE PARTITIONED 
             (KEYFLD BIGINT,
              DATAFLD VARCHAR(200))
             PARTITION BY RANGE (KEYFLD)
                 (PARTITION FIRST STARTING 0 ENDING 100,
                  PARTITION SECOND STARTING 100 EXCLUSIVE ENDING 200,
                  PARTITION THIRD STARTING 200 EXCLUSIVE ENDING 300)           
2 番目の区画を 3 つの部分に分割するために、 元の CREATE TABLE ステートメントを変更して区画を再定義します。
CREATE OR REPLACE TABLE PARTITIONED 
             (KEYFLD BIGINT,
              DATAFLD VARCHAR(200))
             PARTITION BY RANGE (KEYFLD)
                 (PARTITION FIRST STARTING 0 ENDING 100,
                  PARTITION SECOND STARTING 100 EXCLUSIVE ENDING 150,
                  PARTITION SPLIT1 STARTING 151 EXCLUSIVE ENDING 175,
                  PARTITION SPLIT2 STARTING 176 EXCLUSIVE ENDING 200,
                  PARTITION THIRD STARTING 200 EXCLUSIVE ENDING 300)           
これで、 表には 5 つの区画ができ、新しい定義に従ってデータがこれらの区画に分配されます。

この例では、デフォルトの ON REPLACE PRESERVE ALL ROWS を使用しています。これは、すべての行のすべてのデータが確実に保持されることを意味します。既存の区画からのデータが新しい区画のどれにも収まらない場合、 ステートメントは失敗します。区画とその区画からのデータを削除するには、 CREATE OR REPLACE TABLE ステートメントでその区画の定義を省略し、ON REPLACE PRESERVE ROWS を使用します。こうすると、 残りの区画に割り当てることのできるデータはすべて保持され、定義された区画がなくなったデータは廃棄されます。