表の変更

TimesTen Scaleoutで表を変更し、デフォルトを変更したり、列および制約を追加および削除することができます。ただし、表が空である場合を除き、分散スキームは変更できません。また、DISTRIBUTE BY REFERENCE句で指定された制約は削除できません。『Oracle TimesTen In-Memory Database SQLリファレンス』ALTER TABLEを参照してください。

表7-1に、表の変更に関連付けられているルールを示します。サポートされている例を次に示します。

表7-1 分散スキームのALTER TABLEのルール

ALTER文 コメント
CREATE TABLE t1 (c1 NUMBER, 
 c2 VARCHAR2 (10));

ALTER TABLE t1 
 DISTRIBUTE BY HASH (c1);

表が空の場合は、操作は成功します。表が空でない場合、空でない表では分散キーを変更できないため、操作は失敗します。

CREATE TABLE t1...CONSTRAINT fk1...
 DISTRIBUTE BY REFERENCE(fk1);

ALTER TABLE t1 DROP CONSTRAINT(fk1);

操作は失敗します。外部キーは、表を分散するために使用されます。

次の例があります。

ALTER TABLEを使用した主キー制約の追加

この例では、主キーまたは分散句を使用せずにmytable表を作成します。表は、非表示列のハッシュによって分散されます。次に、ALTER TABLE文を使用して、主キー制約を追加します。操作は成功しますが、分散キーは変更されません。

Command> CREATE TABLE mytable (col1 NUMBER NOT NULL, col2 VARCHAR2 (32));
Command> describe mytable;
 
Table SAMPLEUSER.MYTABLE:
  Columns:
    COL1                            NUMBER NOT NULL
    COL2                            VARCHAR2 (32) INLINE
  DISTRIBUTE BY HASH
 
1 table found.
(primary key columns are indicated with *)

これで、表を変更して主キーを追加します。操作は成功します。分散スキームおよび分散キーは変更されません。

Command> ALTER TABLE mytable ADD CONSTRAINT c1 PRIMARY KEY (col1);
Command> describe mytable;
 
Table SAMPLEUSER.MYTABLE:
  Columns:
   *COL1                            NUMBER NOT NULL
    COL2                            VARCHAR2 (32) INLINE
  DISTRIBUTE BY HASH
 
1 table found.
(primary key columns are indicated with *)

ALTER TABLEを使用した分散キーの変更

この例では、ALTER TABLE文を使用して分散キーを変更できることを示します(ただし、表が空の場合のみ)。

Command> CREATE TABLE mytable2 (col1 NUMBER NOT NULL, col2 VARCHAR2 (32)) DISTRIBUTE BY HASH (col1,col2);
Command> describe mytable2;
 
Table SAMPLEUSER.MYTABLE2:
  Columns:
    COL1                            NUMBER NOT NULL
    COL2                            VARCHAR2 (32) INLINE
  DISTRIBUTE BY HASH (COL1, COL2)
 
1 table found.
(primary key columns are indicated with *)

ALTER TABLE文を使用して、分散キーをcol1に変更します。表が空のため、操作は成功します。

Command> ALTER TABLE mytable2 DISTRIBUTE BY HASH (col1);
Command> describe mytable2;
 
Table SAMPLEUSER.MYTABLE2:
  Columns:
    COL1                            NUMBER NOT NULL
    COL2                            VARCHAR2 (32) INLINE
  DISTRIBUTE BY HASH (COL1)
 
1 table found.
(primary key columns are indicated with *)