表の変更
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 *)