ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## ALTER TABLE

ALTER TABLE文は、既存の表への列または外部キーの追加および削除、既存の表のハッシュ索引のサイズ変更、列のデフォルト値の変更、または列の一意制約の削除や追加を実行します。

アクセス制御

TimesTenインスタンスでアクセス制御が有効な場合、この文にはDDL権限が必要です。

SQL構文

列を追加する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
ADD [COLUMN] ColumnName ColumnDataType [INLINE | NOT INLINE]

または

ALTER TABLE [Owner.]TableName ADD
(ColumnName ColumnDataType [INLINE | NOT INLINE] [, ... ] )

列を削除する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
DROP [COLUMN] ColumnName

または

ALTER TABLE [Owner.]TableName DROP
(ColumnName [, ... ] )

外部キーを追加する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
ADD [CONSTRAINT ForeignKeyName] FOREIGN KEY
(ColumnName [,...])

REFERENCES RefTableName [(ColumnName [,...])]

外部キーを削除する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
DROP CONSTRAINT ForeignKeyName

ハッシュ索引のサイズを変更する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
SET PAGES = RowPages | CURRENT

列のデフォルト値を変更する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
MODIFY (ColumnName DEFAULT DefaultVal)

列の一意制約を追加または削除する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE Owner.]TableName
{ADD | DROP} UNIQUE ( ColumnName )

NULL値可能な列のデフォルト値をNULLに変更することによって削除する場合、ALTER TABLE文の構文は次のとおりです。

ALTER TABLE [Owner.]TableName
MODIFY (ColumnName DEFAULT NULL)

パラメータ

ALTER TABLE文には、次のパラメータがあります。

[Owner.]TableName | 変更する表を指定します。
UNIQUE | 列ColumnNameの各行の値が一意である必要があることを示します。
MODIFY | 指定した列の属性を新しい値に変更します。
DEFAULT [DefaultVal | NULL] | 列のデフォルト値（DefaultVal）を指定します。NULLを指定すると、列のデフォルト値が削除されます。デフォルト値にSYSDATEを指定した列を追加すると、既存の行の列の値のみが、列が追加された時点のシステム日付になります。デフォルト値がUSER関数の1つである場合、列の値はALTER TABLE文を実行したセッションのユーザーの値になります。 列のデフォルト値を変更しても、既存の行は変更されません。
ColumnName | UNIQUE CONSTRAINTまたはデフォルト値が変更される列の名前です。新しい列に、既存の列名または別の新しい列名を指定することはできません。
ColumnDataType | 追加する列のデータ型です。追加のパラメータが必要なデータ型もあります。指定できるデータ型の詳細は、「データ型」を参照してください。
INLINE / NOT INLINE | デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
CONSTRAINT | 削除する外部キーを指定します。オプションで、追加された外部キーの名前をユーザーが指定するように指定します。
ForeignKeyName | 追加または削除する外部キーの名前です。すべての外部キーは、ユーザーが名前を指定しなかった場合、デフォルトの名前が割り当てられます。ユーザーが指定した名前またはシステムの名前のいずれかをDROP FOREIGN KEYコマンドで指定できます。
FOREIGN KEY | 外部キーを追加または削除するよう指定します。「FOREIGN KEY」を参照してください。
REFERENCES | 外部キーが別の表を参照するように指定します。
RefTableName | 外部キーが参照する表の名前です。
SET PAGES | 表の行ページに想定される数に基づいてハッシュ索引のサイズを変更します。各行ページのデータの行数は、最大256です。この数によって、ハッシュ索引に対して作成されるハッシュ・バケットの数が決まります。最小値は1で、最大値は268435456/256（2^28/256）です。推定した数が小さすぎると、パフォーマンスが悪化します。定数（RowPages）または現在の行ページの数を指定できます。ハッシュ索引とページの詳細は、「列定義」を参照してください。
RowPages | 想定される行ページの数です。
CURRENT | 現在使用されている行ページの数を使用します。

説明

- ALTER TABLE文を使用して一時表を変更することはできません。
- ALTER TABLE ADD文は、既存の表に1つ以上の新しい列を追加します。新しい列は、新しい1つのパーティション内のすべての既存の行の最後に追加されます。

· マテリアライズド・ビューから参照されている列は削除できません。

- 追加される列の数に関係なく、1文につき1つのパーティションのみが表に追加されます。
- 新しい列をNOT NULLとして宣言することはできません。

· 新しい列に対してデフォルト値が指定されている場合を除き、追加されるすべての列の初期値はNULLです。

- 表の列の合計数は、255を超えることはできません。また、表のパーティションの合計数も、255を超えることはできません。2つのうちのいずれかがTimesTenによって使用されます。
- PRIMARY KEY句は、新しい列を追加する場合には使用できません。ALTER TABLEを使用して表の主キーを変更することはできません。
- ALTER TABLE ADD文の結果として、問合せ時に新しい各パーティションに対して追加の読取りが発生します。このため、変更された表のパフォーマンスがわずかに悪化することがあります。パフォーマンスを回復するには、表を削除して再作成するか、またはttMigrate create -c -noRepUpgradeコマンドを使用してから、ttRestore -r-noRepUpgradeコマンドを使用して表をリストアします。追加された列を削除しても、悪化したパフォーマンスは回復されず、パーティションの数も減りません。
- ALTER TABLE DROP文は、既存の表から1つ以上の列を削除します。削除した列は、表の現在の行からすべて削除されます。それ以降のSQL文では、削除した列は使用できなくなります。これらの列は存在しないものとして処理されます。表の主キーに含まれている列は削除できません。また、表の外部キーに含まれている列も、すべての外部キーを削除しないかぎり削除できません。索引付けされた列は、列の索引をすべて削除しないかぎり削除できません。ALTER TABLEを使用して表の列をすべて削除することはできません。かわりにDROP TABLEを使用します。
- 表から列が削除された場合、その表を参照するすべてのコマンドを再コンパイルする必要があります。削除された列が参照されると、再コンパイル時にエラーが発生することがあります。アプリケーションはそのコマンドを再度準備し、パラメータと結果列を再作成する必要があります。列が表に追加された場合、SELECT *文を含むコマンドは無効になります。これらのコマンドのみを再度準備する必要があります。その他のすべてのコマンドは、想定したとおりに動作します。
- 列が表から削除されても、列の領域は解放されません。索引が作成され、一意制約が保持されます。これにより、領域と時間でオーバーヘッドが発生します。一意制約の保持に使用される索引をDROP INDEX文を使用して削除することはできません。
- 一意制約とそれに関連付けられている索引は、レプリケートされた表の一意索引として使用されている場合、削除できません。
- ALTER TABLE ADD/DROP CONSTRAINT文には、次の制限があります。

- 外部キーが削除されると、TimesTenでは外部キーに関連付けられている索引も削除されます。通常のDROP INDEX文を使用して外部キーに関連付けられている索引を削除しようとすると、エラーになります。
- 外部キーは、キャッシュ・グループの表では追加または削除できません。
- 外部キーは、TimesTenのレプリケーションに含まれている表では追加または削除できません。レプリケートされている表またはレプリケートされた表でこの処理を実行しようとすると、エラーが返されます。
- 外部キーは、ビューまたは一時表では追加または削除できません。

##### 例13.15

列ReturnRateを表Partsに追加します。

    ALTER TABLE Parts ADD COLUMN ReturnRate DOUBLE;

##### 例13.16

列NumAssignとPrevDeptを表Contractorに追加します。

    ALTER TABLE Contractor
    ADD ( NumAssign INTEGER, PrevDept CHAR(30) );

##### 例13.17

表Employeeの列Addr1とAddr2を削除します。

    ALTER TABLE Employee DROP ( Addr1, Addr2 );

##### 例13.18

次の文では、表BooksのUNIQUEのTitle列を削除します。

    ALTER TABLE Books DROP UNIQUE (Title);

##### 例13.19

次の文では、デフォルト値5を使用して列x1を表T1に追加します。

    ALTER TABLE T1 ADD (x1 INT DEFAULT 5);

##### 例13.20

次の文では、列のデフォルト値x1を2に変更します。

    ALTER TABLE T1 MODIFY (x1 DEFAULT 2);

関連項目

CREATE TABLE
DROP TABLE