テーブルを変更します。
Synopsis
ALTER TABLE table alter-table-action

where alter-table-action is one of the following:
     ADD add-action
     DROP drop-action
     DELETE drop-action
     ALTER [COLUMN] identifier alter-column-action
     MODIFY modification-spec

add-action ::= 
     [CONSTRAINT table]
     [(] FOREIGN KEY identifier (identifier-commalist) 
          REFERENCES table (identifier-commalist)
          [triggered-action] [)]
     |
     [(] UNIQUE (identifier-commalist) 
     |
     [(] PRIMARY KEY identifier (identifier-commalist) [)] 
     | 
     DEFAULT [(] default-spec [)] FOR identifier
     |
     [COLUMN] [(] identifier datatype 
          {%ALPHAUP | %EXACT | %SQLSTRING [(literal)] |
          %SQLUPPER [(literal)] | %UPPER | %STRING [(literal)] |
          %DESCRIPTION literal | DEFAULT [(] default-spec [)] |
          field-constraint
          } [)]

drop-action ::= 
     FOREIGN KEY identifier |
     PRIMARY KEY |
     CONSTRAINT identifier |
     [COLUMN] identifier [RESTRICT | CASCADE] 

alter-column-action ::= 
     SET DEFAULT [(]default-spec[)] |
     DEFAULT [(]default-spec[)] |
     DROP DEFAULT | 
     NULL | 
     NOT NULL | 
     datatype 

modification-spec ::=
     identifier [datatype] 
          [DEFAULT [(]default-spec[)]]
          [CONSTRAINT identifier] [NULL] [NOT NULL]
引数
table 変更するテーブルの名前
identifier 変更する列の名前有効な識別子の詳細は、"SQL の概念" のページを参照してください。
datatype Caché SQL の有効なデータ型。有効なデータ型の詳細は、"SQL の概念" のページを参照してください。
default-spec このフィールドがユーザ指定のデータ値でオーバーライドされない場合に、このフィールドに自動的に入力される既定のデータ値。一重引用符で囲んだ文字列、数値、キーワード・オプション (NULL、CURRENT_USER、CURRENT_TIMESTAMP など)、OBJECTSCRIPT リテラルなどを指定できます。詳細は、"CREATE TABLE" を参照してください。
概要
ALTER TABLE 文は、要素の追加や削除または既存の要素の修正を行い、テーブルを変更します。1 つの ALTER TABLE 文で実行できる処理は、1 つのみです。ALTER TABLE DROP 文と ALTER TABLE DELETE 文は同義語です。
ADD COLUMN の制限
ALTER COLUMN の制限
データが含まれている列のデータ型を変更することでストリーム・データが非ストリーム・データになる場合、または非ストリーム・データがストリーム・データになる場合、そのデータ型変更は実行できません。この変更を実行しようとすると、SQLCODE エラー・コード - 374 が発生します。列に既存のデータがない場合は、この変更が可能です。
ADD PRIMARY KEY の制限
一意でないデータを含むフィールド、または NULL 値の入力が認められているフィールドには、主キー制約を追加できません。
既存のフィールドに主キー制約を追加する場合、対応する IDKey インデックスの定義は、SET OPTION PKEY_IS_IDKEY 文、Caché 構成マネージャの設定、およびデータの存在で決まります。[詳細] タブの [SQL] オプションを展開し、[DDL 経由で作成された主キーが ID キー] に設定されている現在の値を表示します。このオプションが [はい] に設定されていて、このフィールドにデータがない場合、主キー・インデックスは IDKey インデックスとしても定義されます。このオプションが [はい] に設定されていて、このフィールドにデータがある場合、IDKey インデックスは定義されません。
主キーがすでに存在する場合に主キーを作成する
主キーがすでに定義されているテーブルに、他の主キーを作成しようとした場合、Caché 構成マネージャ の設定によりその影響は異なります。[詳細] タブの [SQL] オプションを展開し、[キーが存在する時にDDLを通して主キーを作成することを許可する] に設定されている現在の値を表示します。
既定は “いいえ” です。既定で、主キーがすでに存在する場合、Caché は主キーの定義を拒否し、SQLCODE -307 エラーを返します。ここでは、この設定を推奨します。
このオプションが “はい” に設定されていると、ALTER TABLE ADD PRIMARY KEY により、Caché は主キー・インデックスをクラス定義から削除し、指定の主キー・フィールドを使用したインデックスを再生成します。
ただし、既存の主キーが存在する状態で主キーを作成できるようにこのオプションを設定していても、テーブルにデータがある場合は、IDKey インデックスを兼ねる主キー・インデックスは再作成できません。これを実行しようとすると、SQLCODE -307 エラーが返されます。
DROP CONSTRAINT の制限
外部キー制約によって参照されている一意キー制約または主キー制約は削除できません。削除しようとすると、SQLCODE -317 エラーが返されます。
主キー制約の削除で発生する影響は、SET OPTION PKEY_IS_IDKEY 文の設定に応じて、以下のようになります。
存在しない制約の削除
制約を持たないフィールドのフィールド制約を削除しようとした場合、Caché 構成マネージャの設定によりその影響は異なります。[詳細] タブの [SQL] オプションを展開し、[制約なしの DDL DROP を許可する] に設定されている現在の値を表示します。
既定は “いいえ” です。既定で、制約が存在しない場合、Caché は制約の削除を拒否し、SQLCODE -315 エラーを返します。しかし、“はい” に設定されていると、ALTER TABLE DROP CONSTRAINT により、Caché は処理を実行せず、エラー・メッセージを発行しません。
以下の例では、テーブルを作成し、その 2 つの列にデータを入力してテーブルを変更します。ALTER TABLE コマンドは FavoriteColors 列を作成し、その列で既存の 2 つの行に対応するフィールドに値 'Blue' を入力します。
  &sql(CREATE TABLE Sample.PTest (
     Id      INT NOT NULL,
     Name    VARCHAR(35),
     DOB     DATE,
     CONSTRAINT PTestPK PRIMARY KEY (Id) )
     )
  WRITE !,"Created table, SQLCODE=",SQLCODE
  &sql(INSERT INTO Sample.PTest (Id, Name, DOB) 
    VALUES (1, 'David Vanderbilt', 46639))
  WRITE !,"Inserted data in table, SQLCODE=",SQLCODE
  &sql(INSERT INTO Sample.PTest (Id, Name, DOB) 
    VALUES (2, 'Mary Smith', 49759))
  WRITE !,"Inserted data in table, SQLCODE=",SQLCODE
  &sql(ALTER TABLE Sample.PTest 
    ADD COLUMN FavoriteColor %String NOT NULL DEFAULT 'Blue')
  WRITE !,"Altered table, SQLCODE=",SQLCODE
関連項目