ALTER TABLE ステートメント
ALTER TABLE ステートメントは、現行サーバーにある表の記述を変更します。
呼びかけ ALTER TABLE
このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 これは、DYNAMICRULES RUN動作が有効になっている場合にのみ、動的に準備できる実行可能なステートメントです。 詳細は、「Authorization IDs and dynamic SQL」 を参照してください。
承認 ALTER TABLE
以下に定義する特権セットには、少なくとも次のいずれかが含まれていなければいけません。
- 表に対する ALTER 特権
- 表の所有権
- データベースの DBADM 権限
- SYSADM または SYSCTRL 権限
- システム DBADM
FL 500 インストール SYSOPR 権限(プロセスの現在の SQLID が SYSINSTL に設定されている場合)
システム期間テンポラル表に変更を加える場合、1 つ以上の変更の結果として関連する履歴表も変更されるのであれば、ステートメントの許可 ID が保持する特権に、以下のうち少なくとも 1 つが含まれている必要もあります。
- 履歴表に対する ALTER 特権
- 履歴表の所有権
- データベースの DBADM 権限
- SYSADM または SYSCTRL 権限
- システム DBADM
FL 500 インストール SYSOPR 権限(プロセスの現在の SQLID が SYSINSTL に設定されている場合)
データベースが暗黙的に作成される場合、データベース特権は暗黙的なデータベースまたは DSNDB04 上になければなりません。
特権セットに以下のいずれかの文節が指定されている場合、この特権セットには SECADM 権限が含まれている必要があります。
- ACTIVATE
- DEACTIVATE
以下の場合には、さらに特権が必要になる可能性があります。
- FOREIGN KEY、 ADD PRIMARY KEY、 ADD UNIQUE、 DROP PRIMARY KEY、 DROP FOREIGN KEY、または DROP CONSTRAINT を指定している。
- 表に追加される列のデータ・タイプが特殊タイプである。
- 全選択を指定している。
- 列がセキュリティー・ラベル列として定義されている。
- ROWID GENERATED BY DEFAULT として列が定義されている。
上記の特権の詳細については、 適切な文節の説明を参照してください。
特権セット:
アプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、パッケージの所有者が持つ特権となります。 このステートメントが動的に準備される場合、特権セットは、 プロセスの各許可 ID およびロールが持つ特権セットの和集合になります。
構文 ALTER TABLE
- 1 同じ節は、ADD COLUMN または ALTER COLUMN の節を除き、1 回以上指定してはならない。 複数の ADD COLUMN 節を同じステートメントに指定する場合、references-clause を含むことができる ADD COLUMN 節は多くて 1 つです。 ALTER COLUMN SET DATA TYPE を指定する場合は、最初に指定する必要があります。
- 2 ADD PARTITION 節と ALTER PARTITION 節は、既存の論理パーティションの間に新しいパーティションを追加する場合にのみ、一緒に指定することができます。 それ以外の場合、ALTER COLUMN、ADD PARTITION、ALTER PARTITION、ROTATE PARTITIONの各節は、互いに排他的です。
- 3 ADD CLONE、DROP CLONE、RENAME COLUMN、ALTER ORGANIZATION、DROP ORGANIZATION、ADD VERSIONING、DROP VERSIONING、DROP COLUMN、ACTIVATE、DEACTIVATE、ENABLE ARCHIVE、または DISABLE ARCHIVE が指定されている場合、ALTER TABLE ステートメントでは他の句は許可されません。
- 4 参照制約または一意性制約において、ADDキーワードは、文で最初に指定された節である場合、省略可能です。 それ以外の場合は、ADD が必要です。
- 5 FL 504 ハッシュ型テーブルは非推奨となりました。 Db2 12 以降、APPLCOMPAT( V12R1M504 ) 以降では、ハッシュ型で構成されたテーブルを作成したり、既存のテーブルをハッシュ型に変更したりすることはできなくなります。 既存のハッシュ編集表は引き続きサポートされますが、今後はサポートされない可能性があります。
options-continued:
- 1 同じ節は、ADD COLUMN または ALTER COLUMN の節を除き、1 回以上指定してはならない。 複数の ADD COLUMN 節を同じステートメントに指定する場合、references-clause を含むことができる ADD COLUMN 節は多くて 1 つです。 ALTER COLUMN SET DATA TYPE を指定する場合は、最初に指定する必要があります。
- 2 ADD CLONE、DROP CLONE、RENAME COLUMN、ALTER ORGANIZATION、DROP ORGANIZATION、ADD VERSIONING、DROP VERSIONING、DROP COLUMN、ACTIVATE、DEACTIVATE、ENABLE ARCHIVE、または DISABLE ARCHIVE が指定されている場合、ALTER TABLE ステートメントでは他の句は許可されません。
column-definition:
- 1 データ型は 、as-row-change-timestamp-clause が指定されている場合、オプションです。
- 2 同一の条項は、複数回指定してはならない。
- 3 AS SECURITY LABEL は、CHAR(8)データ型のみに指定でき、NOT NULL および WITH DEFAULT 節を指定する必要があります。
- 4 IN LINE LENGTH は、LOB データ型または LOB データ型に基づく別個の型を持つ列にのみ適用されます。
column-alteration:
- 1 INLINE LENGTH は、ユニバーサル・テーブル・スペース内のテーブルのLOB列に対してのみ指定できます。 FOR SBCS DATA または FOR MIXED DATA も指定する場合、INLINE LENGTH は指定できません。
referential-constraint:
- 1 過去のリリースとの互換性を保つため、CONSTRAINT句(上記参照)が指定されていない場合、FOREIGN KEYの後に制約名を指定することができます。
partition-element:
- 1 FL 504 ハッシュ型テーブルは非推奨となりました。 Db2 12 以降、APPLCOMPAT( V12R1M504 ) 以降では、ハッシュ型で構成されたテーブルを作成したり、既存のテーブルをハッシュ型に変更したりすることはできなくなります。 既存のハッシュ編集表は引き続きサポートされますが、今後はサポートされない可能性があります。
partition-clause:
- 1 成長によるパーティショニングのテーブルスペースでは、ENDING節を指定してはならないが、範囲パーティショニングのテーブルスペースでは、指定しなければならない。
- 2 FL 504 ハッシュ編成テーブルは非推奨です。 Db2 12 以降、APPLCOMPAT( V12R1M504 ) 以降では、ハッシュ型で構成されたテーブルを作成したり、既存のテーブルをハッシュ型に変更したりすることはできなくなります。 既存のハッシュ編集表は引き続きサポートされますが、今後はサポートされない可能性があります。
説明の対象: ALTER TABLE
- テーブル名
- 変更する表を指定します。 この名前は、現行サーバーに存在する表を示すものでなければなりません。
この名前は、宣言された一時テーブル、ディレクトリ・テーブル、ビュー、またはXML列のために暗黙的に作成されたテーブルを識別してはならない。
名前がカタログ・テーブルを識別する場合、指定できる句はDATA CAPTURE CHANGESだけである。 名前がアクセラレーターのみの表を識別する場合は、指定できる文節は ADD RESTRICT ON DROP または DROP RESTRICT ON DROP だけです。table-name に補助表を指定すると、変更は以下の文節に制限されます。- APPEND
table-name にマテリアライズ照会表を指定すると、変更は次の文節によって制限されます。- AUDIT
- DATA CAPTURE
- ALTER MATERIALIZED QUERY
ALTER PARTITION
- DROP MATERIALIZED QUERY
- ADD RESTRICT ON DROP
- DROP RESTRICT ON DROP
- ROTATE PARTITION
- KEY LABEL
- NO KEY LABEL
FL 502 キーラベルキーラベル名または キーラベルなし
暗号化のために鍵ラベルを表レベルで指定するかどうかを指定します。 変更された KEY LABEL 値を有効にするには、既存の関連表スペースおよび索引スペースの後続の REORG が必要になります。 table-name は、ユニバーサル表スペースまたはパーティション化 (非 UTS) 表スペース内にある表を識別する必要があります。- KEY LABEL KEY-label-name
- 表に関連付けられたすべての表スペースおよび索引スペースを暗号化するために使用されるデフォルトの鍵ラベルを指定します。 明示的または暗黙的に作成されるかどうかに関係なく、ここには、基本表スペース、補助表スペース、XML 表スペース、索引スペース、およびクローン表の表スペースが含まれます。 アーカイブ表または履歴表の鍵ラベルを個別に設定する必要があります。
データ・セットは、表に関連付けられているすべての表スペースおよび索引スペースに対してDb2で管理されている必要があります。
table-name は、以下のいずれかを示す名前であってはなりません。- カタログ表。
- ディレクトリー表
- クローン表。
- 補助表。
- XML 列用に暗黙的に作成された表。
- 作成されたグローバル一時表。
鍵ラベルは、ICSF で定義する必要があります。 Db2 アドレス空間 RACF® のユーザーIDまたはグループは、 RACF のキーラベルへのアクセスが許可されていなければなりません。
鍵ラベルは、データ・セットの割り振り時に、継承またはオーバーライドすることができます。 優先順位の詳細については、基本表スペースおよび関連オブジェクトの鍵ラベルの判別を参照してください。
- NO KEY LABEL
- 暗号化用の鍵ラベルが表レベルで鍵ラベルで指定されていないことを示します。 既存のテーブルレベルのキーラベルはすべて削除されます。

ADD COLUMN
- 列を追加する列定義
- 列を表に追加します。 次の列を除いて、既存の行にある列の値はすべて、そのデフォルト値に設定されます。
- ROWID 列
- ID 列
- 行変更タイム・スタンプ列
- 行開始列
- 行終了列
- トランザクション開始 ID 列
表に n 列がある場合、新しい列の順序は n+1 になります。 n の値は 749 を超えてはいけません。 従属表では、n が 748 を超えてはいけません。
列の合計バイト・カウントが増えることによって最大行サイズを超えてしまう場合には、列の追加はできません。 表の最大行サイズは、最大レコード・サイズで説明されている最大レコード・サイズより 8 以下です。
LOB 列を追加し、その表にまだ ROWID 列がない場合、Db2暗黙的に非表示の ROWID 列を作成します。 暗黙的に作成される可能性がある、または明示的に作成する必要がある他のオブジェクトなど、LOB 列を含む表の作成を参照してください。 ROWID列の追加に関する詳細は、「ROWID列の追加」 を参照してください。
暗黙的に作成された LOB オブジェクトの場合、その特権セットで必要となるのは、その表 (このデータベースが暗黙的に作成されている場合は、DSNDB04) を含む データベース上での CREATETAB と CREATETS 特権であり、バッファー・プール上と、補助表および LOB 表スペースで使用するストレージ・グループ上での USE 特権です。 暗黙的に作成されたオブジェクトは、ベーステーブルの所有者が所有します。
XML 列を追加する場合、その特権セットで必要となるのは、その表 (このデータベースが暗黙的に作成されている場合は、DSNDB04) を含むデータベース上での CREATETAB と CREATETS 特権であり、 追加対象の最初の DOCID に対してはその基本表上での INDEX であり、バッファー・プール上と、XML オブジェクトが使用するストレージ・グループ上での USE 特権です。 これらの特権は、暗黙的に作成された XML オブジェクトに対して必要です。 暗黙的に作成されたオブジェクトは、ベーステーブルの所有者が所有します。
FL 500 既存のテーブルにXML列を追加すると、関連するベース・テーブルのPAGENUM属性に従ってXMLテーブル空間が暗黙的に作成されます。 DSSIZEの値は、基本テーブルを含むテーブル空間のタイプによって異なります。 詳しくは、 XMLテーブル・スペースの暗黙的作成を参照のこと。
表に列を追加すると、表スペースは通知 REORG ペンディング (AREO*) 状況に置かれています。 ただし、空でないテーブルに ID 列を追加すると、そのテーブル・スペースは REORG-pending(REORP)ステータスになります。
表は履歴表やアーカイブ表であってはなりません。
表がシステム期間テンポラル表である場合、関連する履歴表にも列が追加されます。 表がアーカイブ対応表である場合、関連するアーカイブ表にも列が追加されます。 関連する表内の列の以下の属性は、変更される表の対応する列の属性と同じです。
- 名前
- データ・タイプ
- 長さ (インライン LOB 長を含む)、精度、位取り
- 文字ストリング列の FOR BIT、SBCS、または MIXED DATA 属性
- NULL 属性
- 非表示属性
- フィールド・プロシージャー
以下の列は追加できません。
- WITH ROW ATTRIBUTES として定義されている編集プロシージャーを持つ表への列の追加。
- 既に明示的に定義された ROWID 列がある表への ROWID 列の追加
- ID 列を持つ表への ID 列の追加
- 既にセキュリティー・ラベル列がある表へのセキュリティー・ラベル列の追加
- システム期間テンポラル表またはアーカイブ対応表へのセキュリティー・ラベル列の追加
- 行変更タイム・スタンプ列を既に保有する表への行変更タイム・スタンプ列の追加
- 作成済みの一時表への LOB、ROWID、ID 列、または行変更タイム・スタンプ列
- EBCDICまたはASCIIテーブルのMIXED DATA列で、インストールオプションMIXED DATAの設定がNOの場合、 FL 500A GRAPHIC、VARGRAPHIC、DBCLOB、またはCHAR。 例外として、インストール・オプション MIXED DATA が NO である場合でも、Unicode 列は EBCDIC 表に追加できます。
セキュリティー・ラベル列を追加する場合、その表に対する行の許可 (デフォルトの行の許可を含む) は存在できません。
- 列名
- 表に追加したい列の名前。 この名前は、表の既存の列の名前または表内の期間の名前と同じであってはなりません。 SYSTEM_TIME または BUSINESS_TIME という名前の列は、システム期間テンポラル表または履歴表として定義された表には追加できません。 column-name は修飾しないでください。
- データ・タイプ
- 列のデータ・タイプを指定します。 データ・タイプは、組み込みデータ・タイプまたは特殊タイプにすることができます。
- 一体型
- 列のデータ・タイプが組み込みデータ・タイプの 1 つであることを 指定します。 表に列を追加する場合に使用できる組み込みデータ・タイプについては、built-in-type を参照してください。
- 型名明確
- 列の特殊タイプ (ユーザー定義データ・タイプ) を指定します。 列の長さと位取りは、それぞれ特殊タイプのソース・タイプの長さと位取りです。 特権セットには、特殊タイプの USAGE 特権が暗黙的または明示的に含まれている必要があります。
特殊タイプのコード化スキームは表のコード化スキームと同じでなければなりません。
列を参照制約の外部キー の定義で使用する場合、親キーの対応する列のデータ・タイプは同じ特殊タイプを持つ必要があります。
- NOT NULL
- 列に NULL 値が入るのを防止します。 NOT NULL が指定されている場合、列が行 ID データ型を持つか、または ID 列でない限り、DEFAULT 文節を使用して列に NULL 以外のデフォルト値を指定する必要があります。 ROWID 列の場合は NOT NULL を指定しなければならず 、DEFAULT を指定してはいけません。 ID 列の場合は NOT NULL を指定できますが、DEFAULT を指定してはいけません。
- DEFAULT
- データ変更ステートメント、または LOAD に値が指定されていない場合に列に割り当てられるデフォルト値を指定します。 以下のタイプの列に対しては、DEFAULT を指定しないでください。
- ROWID 列 (Db2 はデフォルト値を生成します)
- ID 列 (Db2 はデフォルト値を生成します)
- XML 列
- 行変更タイム・スタンプ列
セキュリティー・ラベル列の DEFAULT キーワードの後には、値を指定しないでください。 Db2 セキュリティラベル列のデフォルト値を提供します。
DEFAULT キーワードの後に値が指定されていない場合、デフォルト値として使用される値は、次のように列のデータ・タイプによって異なります。
- データ型 (Data Type)
- デフォルト値
- Numeric
- 0
- 固定長の文字ストリングまたはグラフィック・ストリング
- ブランク
- 固定長バイナリー・ストリング
- 16 進数のゼロ
- 可変長ストリング
- 長さ 0 のストリング
- インライン BLOB
- 16 進数のゼロ
- インライン CLOB
- ブランク
- インライン DBCLOB
- ブランク
- 日付
- 既存の行の場合は、0001 年 1 月 1 日に対応する日付。 追加される行の場合は、CURRENT DATE。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効にする変更 」を参照してください。
- 時刻
- 既存の行の場合、0 時間 0 分 0 秒に対応する時刻。 追加される行の場合は、CURRENT TIME。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効にする変更 」を参照してください。
- タイム・ゾーンなしのタイム・スタンプ
- 既存の行の場合は、0001 年 1 月 1 日に対応する日付、およ
び 0 時 0 分 0 秒に対応する時刻と、タイム・スタンプ精度までの端数秒のゼロ。 追加された行の場合、CURRENT_TIMESTAMP(P) WITHOUT TIME ZONE p は対応するタイム・スタンプ精度です。
この句やキーワードを使用すると、ターゲットオブジェクトに依存するパッケージや、カスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性がある。 パッケージを無効にする変更 」を参照してください。
- タイム・ゾーン付きのタイム・スタンプ
- 既存の行の場合は、0001 年 1 月 1 日に対応する日付、およ
び 0 時 0 分 0 秒に対応する時刻と、タイム・スタンプ精度までの端数秒のゼロ、タイム・ゾーン 0 時、タイム・ゾーン 0 分。 追加行の場合は、CURRENT_TIMESTAMP(p) WITH TIME ZONE。ここで、p は対応するタイム・スタンプ精度です。
列がタイム・ゾーン付きのタイム・スタンプとして定義されている場合は、デフォルト値にタイム・ゾーンが含まれていなければなりません。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効にする変更 」を参照してください。
所定の列定義では、次のことが言えます。
- DEFAULT と FIELDPROC を両方とも指定することはできません。
- NOT NULL と DEFAULT NULL を両方とも指定することはできません。
- ID 列以外の列で NOT NULL と DEFAULT を省略すると、 暗黙的に DEFAULT NULL を指定したことになります。 ID 列の場合、これは NOT NULL の暗黙的な指定であり、Db2はデフォルト値を生成します。
上記以外のデフォルト値は、以下のいずれかの形式で指定することができます。
- デフォルト値を空ストリングにする場合は WITH DEFAULT
- デフォルト値を NULL にする場合は DEFAULT NULL
- 定数
- 列のデフォルト値として定数を指定します。 定数の値は、その値を列に割り当てるときの規則に適合して
いなければなりません。
文字定数またはストリング定数の長さは、その UTF-8 表現に必要なバイト数が 1536 バイトを超えないようにする必要があります。 16 進グラフィック・ストリング (GX) 定数は指定できません。
また、定数値の長さが、LOB 列の INLINE LENGTH 属性を超えることはできません。
- SESSION_USER または USER
- SQL データ変更ステートメントまたは LOAD 時点での SESSION_USER (USER) 特殊レジスターの値を、列のデフォルトとして指定します。 SESSION_USER が指定されている場合、この列のデータ・タイプは、値が CCSID 37 で表現されるときに、長さ属性が 8 文字以上の文字ストリングでなければなりません。 列のデータ・タイプがインライン CLOB である場合に値を CCSID 37 で表現する場合、INLINE LENGTH 属性は、8 文字以上でなければなりません。 既存の行の場合は、その値は ALTER TABLE ステートメントが 処理される時点の SESSION_USER 特殊レジスターの値になります。
- CURRENT SQLID
- 列のデフォルトとして、SQL データ変更ステートメントまたは LOAD 時点で処理の SQL 許可 ID 値 を指定します。 CURRENT SQLID が指定されている場合、列のデータ・タイプは、CURRENT SQLID の特殊レジスターの長さ属性以上の長さ属性を持つ文字ストリングでなければなりません。 列のデータ・タイプがインライン CLOB である場合、INLINE LENGTH 属性は、CURRENT SQLID 特殊レジスターの長さ属性以上でなければなりません。 既存の行の場合は、その値は ALTER TABLE ステートメントが処理される時点の処理の SQL 許可 ID になります。
- NULL
- 列のデフォルト値として NULL を指定します。
- cast-function-name
- 列の特殊タイプの名前と一致する cast 関数の名前。 cast 関数は、列のデータ・タイプが特殊タイプである場合にだけ使用できます。cast 関数のスキーマ名は、明示的に指定されているか、または関数解決を介して暗黙的に解決されるかに関係なく、特殊タイプの 明示的または暗黙的に指定されているスキーマ名と同じでなければなりません。
- 定数
- 引数として定数を指定します。 定数は、特殊タイプのソース・タイプの定数の規則に準拠している必要があります。 定数の長さは、LOBカラムのINLINE LENGTH属性より大きくすることはできません。
- SESSION_USER または USER
- 行が挿入された時点での SESSION_USER (USER) 特殊レジスターの値を、列のデフォルトとして指定します。 列の特殊タイプのソース・タイプは、SESSION_USER 特殊レジスターの長さ属性以上の長さ属性 (CLOB の場合はインライン長さ属性) を持つ CHAR、VARCHAR、またはインライン CLOB でなければなりません。
- CURRENT SQLID
- 行が挿入された時点での CURRENT SQLID 特殊レジスターの値を、列のデフォルトとして指定します。 列の特殊タイプのソース・タイプは、CURRENT SQLID 特殊レジスターの長さ属性以上の長さ属性 (または CLOB の場合はインライン長さ属性) を持つ CHAR、VARCHAR、またはインライン CLOB でなければなりません。
- ヌル
- 引数として NULL 値を指定します。
- GENERATED
- Db2が列の値を生成するように指定します。
GENERATED は、次の列にのみ適用できます。
- ROWID 列
- ID 列
- 行変更タイム・スタンプ列
- 行開始列
- 行終了列
- トランザクション開始 ID 列
- 生成式列
- ALWAYS
- 行が表に挿入されるときに、Db2が列の値を生成することを指定します。 データ伝搬を使用する場合を除いて、ALWAYS が推奨値です。
- BY DEFAULT
- データ変更ステートメントの列に値が指定されていない限り、行が挿入されたときに、Db2が列の値を生成することを指定します。
ROWID 列に対してユーザー提供の値が指定されている場合、Db2は、以下の両方の条件が当てはまる場合にのみ値を使用します。
- この値は、以前にDb2によって生成された有効な行 ID 値です。
- 列に固有の単一列の索引がある。
ROWID 列にこの索引が作成されるまで、挿入操作、更新操作、および LOAD ユーティリティーを使用して表に行を追加することはできません。 表スペース名が CREATE TABLE ステートメントで指定されていない場合、Db2は、索引を含め、表を完了させるために必要なオブジェクトを暗黙的に作成します。 この索引の名前は、「I」の後に列名の最初の 10 文字を続け、さらにランダムに生成された 7 文字が続いたものです。 列名が 10 文字未満の場合、Db2は、名前が 10 文字になるまで、下線文字を名前の末尾に追加します。 暗黙的に作成されたインデックスには、COPY NO 属性があります。
ID 列の場合、Db2は、指定された値を挿入しますが、ID 列に固有の単一列索引がない限り、その列に対する値がユニークであるかどうかを検査しません。
ユーザーが指定した値が識別子カラムに指定された場合、 Db2 は指定された値を挿入しますが、その値に対しては、通常のカラムに対する検証以外の特別な検証は行いません。 Db2 指定された値が、アイデンティティ列に対して定義されたシーケンシャルプロパティにどのように影響するかをチェックしません。 GENERATED BY DEFAULT として定義された ID 列の固有性を保証するには、ID 列に対してユニーク索引を定義します。
データ伝搬を使用する場合のみ、BY DEFAULT が推奨値です。
- AS IDENTITY
- 列が表の ID 列であることを指定します。 表には 1 つの ID 列しか入りません。 AS IDENTITY が指定できるのは、列のデータ・タイプが位取りゼロの正確な数値タイプ (SMALLINT、INTEGER、BIGINT、位取りゼロの DECIMAL、またはこれらのタイプの 1 つに基づく特殊タイプ) である場合に限定されます。 ID 列を定義するときに、ID 列の属性指定の間に入れる分離文字コンマはオプションです。
ID 列は暗黙で NOT NULL になります。 ID 列を表に追加するときには、GENERATED ALWAYS または GENERATED BY DEFAULT も指定する必要があります。
列を AS IDENTITY として定義しても、値が固有であることは必ずしも保証されません。 確実に固有な値を得るには、単一列のユニーク索引を ID 列に対して定義してください。
- 数値定数から開始
- ID 列に生成される最初の値を指定します。 値は、列に割り当て可能な正または負の数で、
小数点の右側にゼロ以外の数字がないように指定します。
ID 列の定義時に値を明示的に指定しないと、昇順の ID 列の場合は MINVALUE、 降順の ID 列の場合は MAXVALUE がデフォルトになります。 この値は必ずしも、ID 列の最大値または最小値に達した後に循環先となる値とは限りません。
サイクルに使用される範囲は、MINVALUE および MAXVALUE によって定義されます。 numeric-constant 値は、MAXVALUE および MINVALUE による制約を受けません。 すなわち、START WITH 文節を使用して、循環に使用される範囲外の値の生成を開始できます。 結果の動作については、 ID 列のサイクルの範囲外の START または RESTART WITH 値の指定 を参照してください。
- 数値定数による増分
- 連続した ID 列値のインターバルを指定します。 この値は、長精度整数定数の値を超えない、列に割り当て可能な、小数点の右側にゼロ以外の数字を持たない任意の正または負の値 (0 を含む) です。 デフォルトは 1 です。
値が正またはゼロの場合、ID 列の値の順序は昇順になります。 値が負の場合、値の順序は降順になります。
- MINVALUE または NO MINVALUE
- 降順の ID 列が循環するか値の生成を停止する最小値、または昇順の ID 列が最大値に達した後で循環する先の最小値を指定します。
- NO MINVALUE
- ID 列の値の範囲に最小端点を設定しないように指定します。 この場合、MINVALUE のデフォルト値は次のいずれかの値になります。
- 昇順の ID 列の場合、値は START WITH の値、または 1 (START WITH が指定されていない場合)。
- 降順の ID 列の場合、値は列のデータ・タイプの最小値。
- MINVALUE 数値定数
- この ID 列に生成される最小値である数値定数を指定します。 この値は、この列に割り当て可能な正または負の値で、小数点の右側にゼロ以外の数字がないように指定します。 値は、最大値以下にする必要があります。
- MAXVALUE または NO MAXVALUE
- 昇順の ID 列が循環するか値の生成を停止する最大値、または降順の ID 列が最小値に達した後で循環する先の最大値を指定します。
- NO MAXVALUE
- ID 列の値の範囲に最小端点を設定しないように指定します。 この場合、MAXVALUE のデフォルト値は次のいずれかの値になります。
- 昇順の ID 列の場合、値は列のデータ・タイプの最大値。
- 降順の ID 列の場合、値は START WITH の値、または -1 (START WITH が指定されていない場合)。
- MAXVALUE 数値定数
- この ID 列に生成される最大値である数値定数を指定します。 この値は、この列に割り当て可能な正または負の値で、小数点の右側にゼロ以外の数字がないように指定します。 値は、最小値以上にする必要があります。
- CYCLE または NO CYCLE
- この ID 列が、最大値または最小値のいずれかに達した後で、引き続いて値を生成するかどうかを指定します。
- NO CYCLE
- 最大値または最小値に達した後、ID 列に値を生成しないことを指定します。 NO CYCLE が デフォルトです。
- CYCLE
- 最大値または最小値に達した後も、この列について値の生成を継続することを指
定します。 このオプションを使用すると、昇順の ID 列が最大値に達した後、最小値が生成されます。 降順の ID 列が最小値に達した後は、最大値が生成されます。 ID 列の最大値および最小値は、循環に使用される範囲を決定します。
CYCLE が有効な場合、ID 列のDb2によって重複値が生成される可能性があります。 ただし、ID 列にユニーク索引が存在する場合に、この列に対して固有でない値が生成されると、エラーが起こります。
- CACHE または NO CACHE
- メモリー内に事前に割り振られている値を保持するかどうかを指定します。 キャッシュに値を事前に割り振って保管しておくと、行を表に挿入する際のパフォーマンスが向上します。 デフォルトは CACHE 20 です。
非データ共有環境では、システムが(通常またはシステム障害によって)シャットダウンされると、コミットされたステートメントで使用されていないキャッシュされたシーケンス値はすべて失われる(つまり、使用されることはない)。 CACHE オプションに指定する値は、システムがシャットダウンされたときに失われる可能性があるシーケンス値の最大数になります。
データ共有環境では、CACHE オプションと NO ORDER オプションを使用して、複数の Db2 メンバにシーケンス値を同時にキャッシュさせることができます。
- NO CACHE
- ID 列の値をキャッシュに事前に割り振って保管しないように指定し、システム障害が発生したときに値が失われないようにします。 この場合、ID 列の新しい値の要求が行われるたびに同期入出力が発生します。
- CACHE 整数定数
- Db2は事前に割り当ててメモリに保持できるように ID 列シーケンスの値の最大数を指定します。
システム障害時に、キャッシュに入っていてまだ割り当てられていないすべての ID 列 は失われ、使用できなくなります。 そのため、CACHE に指定される値は、システム障害時に失われる可能性がある ID 列の値の最大数も表しています。
最小値は 2 です。
データ共用環境では、CACHE オプションまたは NO ORDER オプションを使用して、複数のDb2メンバーがシーケンス値を同時にキャッシュできるようにすることができます。
- ORDER または NO ORDER
- 要求の順序で ID 列の値が生成されるかどうかを指定します。 デフォルトは NO ORDER です。
非データ共有環境では、NO CACHE も指定されない限り、サーバ全体で値が順番に割り当てられる保証はありません。 ORDER は、単一アプリケーション・プロセスのみに適用されます。
データ共有環境では、ORDER が指定されている場合、CACHE 整数定数が指定されていても、暗黙的に CACHE は設定されません。
- NO ORDER
- 要求の順序で値を生成する必要がないことを指定します。
- ORDER
- 値を要求の順序どおりに生成するように指定します。 ORDER を指定すると、値のキャッシングが使用不可になる場合があります。 ORDER は、単一アプリケーション・プロセスのみに適用されます。
データ共用環境では、CACHE オプションおよび NO ORDER オプションが有効な場合、複数のキャッシュを同時にアクティブにすることができます。また、異なるDb2メンバーからの ID 値に対する要求は、厳密な数値順序で値の割り当てを行わない可能性があります。 例えば、メンバー DB2A および DB2B が ID 列を使用し、DB2A がキャッシュ値 1 から 20 を取得し、DB2B がキャッシュ値 21 から 40 を取得すると仮定します。 最初に DB2A が値を要求してから DB2B が要求し、その後 DB2A が再び要求した場合は、割り当てられる値の実際の順序は、1、21、2 になります。 したがって、同一の ID 列を使用して複数のDb2メンバー間で厳密な数値順で ID 値が生成されることを保証するには、ORDER オプションを指定します。
- FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
- カラムがタイムスタンプであり、値は Db2 によって生成されることを指定します。 Db2 行が挿入されるたびに、また、いずれかの列が更新される行については、その行の列の値を生成します。 行変更タイム・スタンプ列に対して生成される値は、その行の挿入または更新の時刻に対応したタイム・スタンプです。 単一ステートメントを使って複数行を挿入または更新すると、行変更タイム・スタンプ列の値は各行ごとに異なる可能性があります。
行変更タイム・スタンプ列を既存の表に追加することは、既存の行が影響を受ける可能性があり、REORG が完了するまで表スペースに対して AREO* 状態が設定される可能性があることを意味します。 既存の行ごとに、タイム・スタンプ値が新規行変更タイム・スタンプ列に割り当てられます。
データ型が指定されている場合、それは「TIMESTAMP WITHOUT TIME ZONE」で精度は6でなければなりません。 行変更タイム・スタンプ列とともに NOT NULL を指定する必要があります。
- AS ROW BEGIN
FL 500 行が挿入されるか、行内の任意の列が更新されるたびに、タイムスタンプ値が列に割り当てられることを指定します。 挿入時または更新時の SYSIBM.TEMPORAL_LOGICAL_TRANSACTION_TIME 組み込みグローバル変数の値が NULL である場合、値は、表の行開始列またはトランザクション開始 ID 列への値の割り当てを必要とする作業単位での最初のデータ変更ステートメントの実行中、またはシステム期間テンポラル表の行が削除されるときに、時刻機構の読み取りを使用して生成されます。 そうでない場合、row-begin列には、挿入時または更新時の組み込みグローバル変数 SYSIBM.TEMPORAL_LOGICAL_TRANSACTION_TIME の値が代入される。
row-begin 列は、システム期間テンポラル表で使用するためのものです。
表に含めることができるのは 1 つの row-begin 列だけです。 data-type が指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。 data-type が指定されている場合は、TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。 列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。 この列には DEFAULT 文節を指定できないため、NOT NULL と定義する必要があります。
row-begin 列を更新することはできません。
行開始列の値は、データ共有メンバーあたり、トランザクションあたり固有の TIMESTAMP(9) 値と、その後のデータ共有メンバー番号を示す 3 桁で構成されます。
- AS ROW END
- 行が挿入されるとき、または行内の列が更新されるときに、列のデータ・タイプの値が割り当てられるように指定します。 タイム・ゾーンなしのタイム・スタンプ列に割り当てられる値は TIMESTAMP
'9999-12-30-00.00.00.000000000000' です。 タイム・ゾーン付きのタイム・スタンプ列に割り当てられる値は TIMESTAMP '9999-12-30.00.00.00.000000000000
+00:00' です。
row-end 列は、システム期間テンポラル表で使用するためのものです。
システム期間データがバージョン管理される表では、更新操作または削除操作の結果として行が削除されると、履歴行の row-end 列の値に、行がいつ削除されたかが反映されます。 履歴行の列に生成される値は、トランザクションに関連付けられた最新のトランザクション開始時刻に対応するタイム・スタンプです。 行が更新される結果、row-end 列の値が、対応する row-begin 列の値以下になる場合、row-end 列のタイム・スタンプ値が調整されます。 単一の SQL ステートメントで複数の行が削除される場合、履歴行の列の値は同じになります。
表に含めることができるのは 1 つの row-end 列だけです。 data-type が指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。 data-type が指定されている場合は、TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。 列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。 列に DEFAULT 文節を指定することはできません。
row-end 列を更新することはできません。
- AS TRANSACTION START ID
行が挿入されるかまたは行のいずれかの列が更新されるときにタイム・スタンプ値を割り当てることを指定します。 システム期間一時テーブルには、 トランザクション開始ID 列が必要である。
Db2 は、トランザクションごとに一意なタイムスタンプ値、またはヌル値を割り当てます。 その列が NULL 可能である場合、NULL 値がトランザクション開始 ID 列に割り当てられます。 それ以外の場合、値は、表の行開始列またはトランザクション開始 ID 列への値の割り当てを必要とするトランザクションでの最初のデータ変更ステートメントの実行中、またはシステム期間テンポラル表の行が削除されるときに、時刻機構を使用して生成されます。 単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。
row-begin 列の値が、他のトランザクション用に生成される row-begin 列値に対して固有である場合、row-begin 列値は transaction-start-ID 列に割り当てられます。 それ以外の場合、transaction-start-ID 列値は row-begin 列値から派生し、他のトランザクション用に生成される transaction-start-ID 列の値に対して固有になるように調整されます。
表に含めることができるのは 1 つの transaction-start-id 列だけです。 data-type が指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。 data-type が指定されている場合は、TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。 列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。 列に DEFAULT 文節を指定することはできません。
transaction-start-id 列を更新することはできません。
- 生成された式節として
- 列の値が Db2 によって生成されることを指定します。 生成された値は、行が挿入されるたび、または行の任意の列が更新されるたびに列に割り当てられます。
- DATA CHANGE OPERATION
- 行を変更するデータ変更ステートメントに応じて、データベース・マネージャーが次の値のいずれかを生成するよう指定します。
- I
- 挿入操作
- U
- 更新操作
- D
- 削除操作
表には 1 つの DATA CHANGE OPERATION 列のみを含めることができます。 列は CHAR(1) として定義する必要があります。 この列には DEFAULT 節を指定できないため、NOT NULL として定義することはできません。
この列は、非 deterministic 生成式列です。
この列に次の節を指定しないでください。
- CCSID 1200
- CCSID 1208
- FIELDPROC
- special-register
- 特殊レジスターの値を指定します。 この列には、列に値を割り当てるデータ変更ステートメントの時点での特殊レジスターの値が入ります。 単一の SQL ステートメントを使用して複数の行が挿入または更新される場合、列の値は、すべての行で同じになります。
special-register は次の特殊レジスターのいずれかでなければならず、列は必要なデータ・タイプを使用する必要があります。
表 1. 非 deterministic 生成式列で取り得る特殊レジスターの値 特殊レジスター 列のデータ・タイプ CURRENT CLIENT_ACCTNG VARCHAR(255) CURRENT CLIENT_APPLNAME VARCHAR(255) CURRENT CLIENT_CORR_TOKEN VARCHAR(255) CURRENT CLIENT_USERID VARCHAR(255) CURRENT CLIENT_WRKSTNNAME VARCHAR(255) CURRENT SERVER CHAR(16) CURRENT SQLID VARCHAR(n)、ここで n ≥ 8 SESSION_USER または USER VARCHAR(128) この列には DEFAULT 節を指定できないため、NOT NULL として定義することはできません。
この列は、非 deterministic 生成式列です。
この列に次の節を指定しないでください。
- CCSID 1200
- CCSID 1208
- FIELDPROC
詳細は、 特別口座をご覧ください。
- セッション変数
- 組み込みセッション変数の値を指定します。 セッション変数の完全修飾名を指定する必要があります。 セッション変数の値は、列に値を割り当てるデータ変更操作の時点で GETVARIABLE 関数から得られます。 単一の SQL ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。
session-variable は次のセッション変数のいずれかでなければならず、列は必要なデータ・タイプを使用する必要があります。
表 2. 非 deterministic 生成式列で取り得るセッション変数の値 セッション変数 列のデータ・タイプ SYSIBM.PACKAGE_NAME VARCHAR(128) SYSIBM.PACKAGE_SCHEMA VARCHAR(128) SYSIBM.PACKAGE_VERSION VARCHAR(122) この列には DEFAULT 節を指定できないため、NOT NULL として定義することはできません。
この列は、非 deterministic 生成式列です。
この列に次の節を指定しないでください。
- CCSID 1200
- CCSID 1208
- FIELDPROC
詳しくは、 組み込みのセッション変数をご覧ください。
- IMPLICITLY HIDDEN
- この列は、名前で明示的に参照しない限り、SQL ステートメントのこの実行結果では認識できません。 例えば、表 T1 には、IMPLICITLY HIDDEN 文節で定義された列が含まれていると仮定します。
SELECT * FROM T1の実行結果には、暗黙的な非表示列は含まれません。 ただし、暗黙的な非表示列の名前を明示的に参照する SELECT ステートメントの結果は、結果表の中にその列を含みます。IMPLICITLY HIDDEN は、ROWID として定義される列、または ROWID に基づく特殊タイプに対して指定してはいけません。 この制限は、アプリケーション互換性レベルが V13R1M506 以上の場合に解除されます。
- column-constraint
- これは、1 つの列からなる制約を定義する簡便な手段です。 列 C の定義に column-constraint を指定すると、列 C を唯一の列として示した unique-constraint、referential-constraint、または check-constraint としてその制約を指定した場合と同じ効果が得られます。
- 参照節
- column-definition の references-clause を
指定すると、単一列で構成されている外部キーの定義が簡略化されます。 したがって、列 C の定義で references-clause を指定すると、C が唯一の
識別される列である FOREIGN KEY 文節の一部として references-clause を指
定した場合と同じ効果があります。以下のタイプの列の定義には references-clause を指定しないでください。これらのタイプの列を外部キーにすることはできないからです。
- LOB 列
- ROWID 列
- XML 列
- DECFLOAT 列
- 行変更タイム・スタンプ列
- セキュリティー・ラベル列
- チェック制約
- column-definition の check-constraint を
指定すると、別の ADD check-constraint 文節でチェック制約を指定する場合と同じ効果があります。 SQL 標準に準拠するためには、列 C の定義で指定したチェック制約は、C 以外の列を参照してはなりません。以下のタイプの列の定義では、チェック制約を指定しないでください。
- LOB 列
- ROWID 列
- XML 列
- DECFLOAT 列
- セキュリティー・ラベル列
- AS SECURITY LABEL
- 表に対して行レベルの細分性のマルチレベル・セキュリティーを定義し、列にセキュリティー・ラベル値を格納するように指定します。 表にはセキュリティー・ラベル列を 1 つだけ指定できます。 セキュリティラベル列を持つテーブルを定義するには、ステートメントの主権限IDが有効なセキュリティラベルを持つ必要があり、 RACF SECLABELクラスがアクティブである必要があります。 また、次の条件も満たしている必要があります。
- 列のデータ・タイプが CHAR(8) である。
- 列のサブタイプが SBCS である。
- 列にフィールド・プロシージャー、チェック制約、または参照制約が指定されていない。
- 列が NOT NULL 文節と WITH DEFAULT 文節を使用して定義されている。
- WITH DEFAULT 節はデフォルト値を指定することはできません (Db2がデフォルト値を決定します)。
- 表に、WITH ROW ATTRIBUTES として定義されている編集プロシージャーがない。
FL 500 列はEBCDICテーブルのUnicode列であってはなりません。
- 表がマテリアライズ照会表のソース表でない。
表の既存の行に対するセキュリティー・ラベル列の値のデフォルトは、ALTER ステートメントを実行した時点でのユーザーのセキュリティー・ラベルです。
- FIELDPROC プログラム名
- 列のフィールド・プロシージャー出口ルーチンとして、
program-name を指定します。 フィールド・プロシージャーは、長さ属性が 255 バイト以下の列に対してのみ指定できます。 FIELDPROC は、組み込み文字ストリング・データ・タイプまたはグラフィック・ストリング・データ・タイプの列に対してのみ指定できます。 列は、以下のいずれかであってはなりません。
- LOB 列
- セキュリティー・ラベル列
- 行変更タイム・スタンプ列
- TIMESTAMP WITH TIME ZONE データ・タイプの列
このフィールド・プロシージャーは列の値のエンコードとデコードを行います。 列に値が挿入されるときは、フィールド・プロシージャーに渡されてエンコードされて から挿入されます。 列に入っている値がプログラムで使用されるときは、フィールド・プロシージャー に渡されてデコードされてから使用されます。 フィールド・プロシージャーは、例えば、列に入力された値の ソート・シーケンスを変更するのに使用することができます。
また、フィールド・プロシージャーは、ALTER TABLE ステートメントの処理中にも呼び出されます。 そのように呼び出される場合、プロシージャーはDb2に列のフィールドの説明を提供します。 フィールド記述は、エンコードされた値のデータ特性を定義します。 逆に、ALTER TABLE ステートメントの中で列について指定する 情報は、デコードされた値のデータ特性を定義します。
FIELDPROC を省略した場合、列はフィールド・プロシージャーを持ちません。
詳細は、「現場での手順」 を参照してください。
- 定数
- これは、呼び出されたときにフィールド・プロシージャーに渡されるパラメーターです。 パラメーター・リストはオプションです。 ALTER TABLE の FIELDPROC 文節で指定した n 番目のパラメーター は、指定したフィールド・プロシージャーの n 番目 のパラメーターに対応しています。 パラメーター・リストの最長は 255 バイトです。コンマは この長さに含まれますが、無意味なブランクや区切りの括弧は含まれません。
- INLINE LENGTH 整数
LOB 列の値のインライン部分の最大長を指定します。 インライン部分は、基本表スペースに保管される部分です。 列が LOB 列 (または LOB に基づく特殊タイプ) でない場合、表がユニバーサル表スペースでない場合、または表がアクセラレーターのみの表である場合は、INLINE LENGTH を指定できません。BLOB 列および CLOB 列の場合、integer は、その列について基本表スペースに保管される最大バイト数を指定します。 整数型は、BLOBまたはCLOBカラムの場合は0~32680(両端を含む)の範囲でなければなりません。
DBCLOB 列の場合、integer は、その列について表スペースに保管される 2 バイト文字の最大数を指定します。 DBCLOB 列の整数は、0~16340(両端を含む)の範囲でなければなりません。
INLINE LENGTH を指定する場合は、integer の値を LOB 列の最大長より大きくすることはできません。
INLINE LENGTH 文節を指定しなかった場合、LOB 列の最大長は、以下の条件に従って決定されます。
- 特殊タイプを使用しないか、使用する特殊タイプが INLINE LENGTH 属性なしで作成されている場合、LOB 列では、インストール・パネル DSNTIPD の LOB INLINE LENGTH パラメーターの値をデフォルト・インライン長として使用しますが、これは LOB INLINE LENGTH の値が LOB 列の最大長を超えない場合です。 LOB INLINE LENGTH の値が LOB 列の最大長を超える場合は、最大長がこの LOB 列のインライン長になります。
- INLINE LENGTH 属性を付けて作成された特殊タイプを使用する場合、LOB 列は、その特殊タイプからインライン長を継承します。
長さの決定方法を問わず、LOB のインライン長が最大長より大きくなることはできません。

ADD COLUMN 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限事項、復旧ステータスへの影響、その他の考慮事項については、 ポイントインタイムリカバリを参照してください。
ALTER COLUMN
- ALTER COLUMN 列名変更
- 既存の ID 列の属性など、既存の列の定義を変更します。 指定した属性のみが変更され、 その他の属性はそのまま変更されません。 以後の列の値は、ALTER TABLE ALTER COLUMN ステートメントによる変更の影響を受けます。
ユニーク制約 (主キーまたはユニーク・キー) にユニーク索引が欠落しているために、変更対象の表が不完全な状態になっていてはなりません。 ALTER TABLE ALTER COLUMN ステートメントは、データ変更ステートメントと同じ作業単位内で処理されないことがあります。 以下のどの条件に当てはまる場合も、列は変更できません。
- 表に、WITH ROW ATTRIBUTES として定義されている編集プロシージャーまたは検証出口プロシージャーがある。
- 表がマテリアライズ照会表定義の中で使用されている
- 表がマテリアライズ照会表である
- 表が、システム期間データバージョン管理が有効なシステム期間テンポラル表である。
- 表が履歴表である
- 表がアーカイブ対応表またはアーカイブ表である。
- 表が作成済みの一時表である
- その列に依存する拡張索引がある
- 列がフィールド・プロシージャーで参照される
- 列が参照制約の中で参照される
- 列が、チェック制約の中で参照される
- 列が SYSTEM_TIME または BUSINESS_TIME 期間の定義で参照されている
- 列が transaction-start-ID 列として定義されている。
- 列がセキュリティー・ラベルとして定義されている
- 列が行変更タイム・スタンプ列として定義されている
- この列は、生成式列です。
FL 500 Db2 11 EBCDIC 表内の Unicode 列は、 同じデータ・タイプ、長さ、および CCSID にのみ変更できます。 Db2 12 の関数レベル500以上で、このタイプの変更により、 Db2 の11個のUnicodeカラム が Db2 の12以降のUnicodeカラムに変換されます。 詳細については、 EBCDICテーブルのUnicodeカラムを参照のこと。
列のデータ・タイプを除き、既存の ID 列の属性はすべて変更できます。 ID 列のデータ・タイプを変更するには、その列を含む表をドロップし、再作成してください。 ID 列の属性が変更されるときに、指定した column-name の列が指定した表に存在している必要があり、IDENTITY 属性を指定して定義されている必要があります。 ID 列ではない既存の列を ID 列に変更するには、その列を含む表をドロップして再作成します。
- 列名
- 変更する列を指定します。 名前を修飾することはできません。名前は、ALTER ステートメントの処理時に変更対象の表に既に存在する列を識別する必要があります。 この名前には、同じ ALTER TABLE ステートメントで追加される列を指定してはなりません。
列は、1 つの ALTER TABLE ステートメントの 1 つの ALTER COLUMN 文節でのみ参照できます。 ただし、同じ ALTER TABLE ステートメント内で制約を追加またはドロップする場合は、同じ列を複数回参照できます。
SET DATA TYPE 変更データ型
- 変更する列の新しいデータ・タイプを指定します。 文字列の場合、この節を使用して、Db2カタログおよび OBD に保管されているサブタイプの定義を変更することができます。SET DATA TYPE 文節には以下の制限が適用されます。
- 列が ID 列であるか、ハッシュ・キーの一部である場合、列のデータ・タイプは変更できません。
- 列の既存のデータ・タイプは、ROWID、日付、時刻、または特殊タイプであってはなりません。
- 新しいデータ・タイプは、列の既存のデータ・タイプと互換であることが必要です。
- ソース・データ・タイプが LOB である場合、ターゲット・データ・タイプは同じ LOB データ・タイプでなければなりません。 ソース・データ・タイプが LOB であり最大長が変更される場合、新規最大長は既存の長さ属性と同じ大きさ以上である必要があります。
- この列がパーティショニング状態の列であり、かつ、既存データ・タイプが CHAR または VARCHAR FOR BIT DATA である場合、新規のデータ・タイプは VARBINARY または BINARY にすることはできません。
- 列が索引の一部であり、DESC 属性で定義されている場合に、列が CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、または BINARY であると、新規データ・タイプは VARBINARY にできません。
FL 500 列がUnicode列の場合、新しいデータ型でFOR BIT DATA、FOR MIXED DATA、またはFOR SBCS DATAを指定することはできません。 
- altered-data-type が XML である場合、変更される列の古いデータ・タイプも XML である必要があります。
- PAGENUM RELATIVE が指定された表または PAGENUM RELATIVE が指定された表スペース内の行のデータ・サイズは最小 3 バイトでなければなりません。 ALTER TABLE ALTER COLUMN の結果として、行サイズが最小サイズ未満になった場合は、有効になりません。
TIMESTAMP 列は、より精度の高い TIMESTAMP にのみ変更できます。 TIMESTAMP WITH TIME ZONE 列は、より精度の高い TIMESTAMP WITH TIME ZONE にのみ変更できます。 タイム・スタンプ列の精度が高くなると、指定されたタイム・スタンプ精度と端数秒の桁数が一致するように、既存のデータ値の端数秒がゼロで拡張されます。
いずれかの数値データ・タイプが DECFLOAT に変換される場合、その列にパーティション・キー、索引、またはユニーク制約があると、ALTER ステートメントは失敗します。
データ・タイプが文字またはグラフィック・ストリングの場合、新しい長さ属性は、列の既存の長さ属性と少なくとも同じ大きさであることが必要です。 データ・タイプが数値データ・タイプの場合、指定する精度および位取りは、既存の精度および位取りと少なくとも同じ大きさであることが必要です。 10 進数の小数部を浮動小数点に変換する場合、その列にユニーク索引またはユニーク制約があると、ALTER ステートメントは失敗します。
指定した列にデフォルト値がある場合、既存のデフォルト値は、割り当て規則に従って新しいデータ・タイプの列に割り当てることができる値を表している必要があります。 デフォルト値は、新しいデータ・タイプを反映して更新されます。
FL 500 インデックスにカラムが指定されている場合、新しいカラム長はインデックス・サイズの制限を超えてはならない。 PADDED 索引の場合、列の長さ属性の合計は 2000-n より大きくすることはできません。ここで、n は NULL 値を含むことができる列の数です。 NOT PADDED インデックスの場合、列の長さ属性の合計は 2000 - n - 2 m - 3 d を超えてはなりません。ここで、 n は NULL 可能列の数、 m は可変長列の数、 d は DECFLOAT 列の数です。 
FL 505 列が主キーまたは一意制約で指定されている場合、その変更によって、特定された列の列長属性と、特定された期間の開始列と終了列の合計が、制約の種類に対して許容される制限を超えてはなりません。
変更後の列の合計バイト数は、最大行サイズを超えてはいけません。 列がパーティション・キー内にある場合、新しいパーティション・キーは 255-n を超えてはいけません。
表3は、SET DATA TYPEでサポートされている数値データ型の変更を示しています表 3. 数値データタイプの変更をサポートしました。 SET DATA TYPE 変更前/変更後 SMALLINT INTEGER BIGINT 小数
(q,t)REAL DOUBLE DECFLOAT
(16)DECFLOAT
(34)SMALLINT Y Y Y (q-t)>4 Y Y Y Y INTEGER N Y Y (q-t)>9 N Y Y Y BIGINT N N Y (q-t)>18 N N N Y 小数
(p,s)s=0
p<5s=0
p<10s=0
p<=19q≥p
(q-t)≥(p-s)p<7 p<16 p<17 Y DECFLOAT
(16)N N N N N N Y Y DECFLOAT
(34)N N N N N N N Y FLOAT
(1-21)N N N N Y Y Y Y フロート
(22-53)N N N N N Y Y Y 表4は、SET DATA TYPEでサポートされている文字データタイプの変更を示しています表 4. SET DATA TYPE (x > =0) でサポートされている文字データ・タイプの変更。 変更前/変更後 CHARACTER (n+x) VARCHAR
(n+x)LONG VARCHAR グラフィック
(n+x)ヴァーグラフィック
(n+x)LONG VARGRAPHIC CHARACTER(n) Y Y N N N N VARCHAR(n) Y Y N N N N LONG VARCHAR N Y N N N N GRAPHIC(n) N N N Y Y N VARGRAPHIC(n) N N N Y Y N LONG VARGRAPHIC N N N N Y N CHAR FOR BIT DATA または VARCHAR FOR BIT DATA 列を BINARY または VARBINARY データ・タイプに変換する場合で、かつ、その列に索引がある場合、その索引は RBDP 状態になります。表 5. SET DATA TYPE (x >= 0) でサポートされているバイナリー・データ・タイプ変更 変更前/変更後 BINARY(n+x) VARBINARY(n+x) CHAR(n) FOR BIT DATA Y Y VARCHAR(n) FOR BIT DATA Y Y BINARY(n) Y Y VARBINARY(n) Y1 Y 注 :列がユニークインデックスの一部である場合、VARBINARYからBINARYへのALTERは許可されません。この条項が指定された状況によっては、 Db2 はALTER文を保留中のデータ定義変更として処理することがあり、その場合、文が発行された時点では、現在のオブジェクト定義とデータに変更が反映されていないことを意味します。 代わりに、変更されたオブジェクトは通知 REORG ペンディング (AREOR) 状態になり、変更されたオブジェクトを適切なユーティリティーで再編成すると、カタログおよびデータへの変更が具体化されます。 詳細については、「保留中のデータ定義の変更 」を参照してください。
FL 500 変更が即時に有効になり、変更の結果新しい表バージョンが生成される場合、変更対象の表を含む表スペースは、勧告的な REORG 保留 (AREO*) ステータスのままになります。
- FOR サブタイプ DATA
- 文字列の subtype を変更します。 この文節は、データは変更しません。 この節は、Db2カタログおよび OBD に格納されているサブタイプの定義のみを更新します。 指定する長さとデータ・タイプは、列の既存の長さおよびデータ・タイプと一致している必要があります。
サブタイプが BIT の場合は、文字ストリングのみが有効です。
サブタイプ値 (SBCS、MIXED、および BIT) についての詳細は、built-in-typeの下のサブタイプ情報を参照してください。
- INLINE LENGTH 整数
- 列の新しいインライン長を指定します。 INLINE LENGTH ユニバーサル・テーブル・スペース内のテーブルのインライン LOB 列に対してのみ指定できます。 同じ ALTER TABLE ステートメントに FOR SBCS DATA または FOR MIXED DATA も指定されている場合は、INLINE LENGTH を指定することはできません。 インライン LOB 列は、基本行フォーマットを持つ表スペースにある表には追加できません。 新規の長さは、元の長さより小さくするか大きくすることができます。 integer は、BLOB または CLOB 列の場合は 0~32680 バイト(両端を含む)の範囲の値、DBCLOB 列の場合は 0~16340 文字(両端を含む)の範囲の値です。 以下の場合は、インライン長を変更できません。
- LOB 列が式ベースの索引または空間インデックスで参照されている。
- 列にデフォルト値が指定されている場合、新規インライン超が、列のデフォルト値の長さより短い。
- 新規インライン長が、LOB 列の最大長を超える。
基本表スペースが空ではないときに、長さを増やすと、表スペースは REORG ペンディング通知状態になり、長さを減らすと、表スペースは REORG ペンディング状態になります。
インライン長を変更すると、基本表スペースに対して REORG ユーティリティーを実行するまでは、式ベースの索引を作成することはできません。
- SET INLINE LENGTH 整数
- 列の新しいインライン長を指定します。 SET INLINE LENGTH ユニバーサル・テーブル・スペース内のテーブルのインライン LOB 列に対してのみ指定できます。 同じ ALTER TABLE ステートメントに FOR SBCS DATA または FOR MIXED DATA も指定されている場合は、INLINE LENGTH を指定することはできません。 インライン LOB 列は、基本行フォーマットを持つ表スペースにある表には追加できません。 新規の長さは、元の長さより小さくするか大きくすることができます。 integer は、BLOB または CLOB 列の場合は 0~32680 バイト(両端を含む)の範囲の値、DBCLOB 列の場合は 0~16340 文字(両端を含む)の範囲の値です。 以下の場合は、インライン長を変更できません。
- LOB 列が式ベースの索引または空間インデックスで参照されている。
- 列にデフォルト値が指定されている場合、新規インライン超が、列のデフォルト値の長さより短い。
- 新規インライン長が、LOB 列の最大長を超える。
基本表スペースが空ではないときに、長さを増やすと、表スペースは REORG ペンディング通知状態になり、長さを減らすと、表スペースは REORG ペンディング状態になります。
インライン長を変更すると、基本表スペースに対して REORG ユーティリティーを実行するまでは、式ベースの索引を作成することはできません。
- SET default-clause
- 変更対象の列の新しいデフォルト値を指定します。 新規のデフォルト値は、列にその値を割り当てるための現行規則に適合している必要があります。 既存の行は現行値のまま残ります。 新規のデフォルト値は、その変更後に挿入される行の中に反映されるだけです。
この表をビューで参照しないでください。 サブシステム・パラメーター RESTRICT_ALT_COL_FOR_DCC が YES に設定されている場合は、DATA CAPTURE CHANGES 属性を指定して表を定義することはできません。
列がユニーク制約 (ユニーク・キーまたは主キー) またはユニーク索引の中で指定されている場合、このデフォルト値は、その列の既存の行と同じ値に変更される可能性があります。 ただし、後続のデータ変更操作は、挿入操作でその列に対して指定された値がないため失敗に終わります。
列が ADD COLUMN 節を持つ ALTER TABLE によって定義されている場合、デフォルト値を設定する前に、含まれている表スペースに対して REORG ユーティリティーを実行します。
LOB 列の場合、インライン LOB のデフォルト値のみを変更できます。 新規デフォルト値の長さは、インライン超を超えることはできません。
ADD COLUMN 文節を指定した ALTER TABLE ステートメントでデフォルト値を指定して正常に実行された場合、
それ以降、その ALTER TABLE ステートメントの処理より前の時点へのポイント・イン・タイム・リカバリーを要求することはできません。 
- DROP DEFAULT
- その列の現行のデフォルト値をドロップします。 NULL 可能でない列の場合、指定された列は、デフォルト値を指定して定義する必要があります。 NULL 可能である列の場合、指定された列には、NULL デフォルト値を使用できません。 NULL 可能である列の場合、新規のデフォルト値は NULL 値になります。
指定された列を含む表をビューで参照しないでください。 サブシステム・パラメーター RESTRICT_ALT_COL_FOR_DCC が YES に設定されている場合は、DATA CAPTURE CHANGES 属性を指定して表を定義することはできません。
以下のステップに従って、ADD COLUMN 文節を指定した ALTER TABLE を使用して定義された列のデフォルト値を除去します。
- 次のように、REORG ユーティリティーまたは UPDATE ステートメントを実行して、AREO* 状態をリセットします。
- 当該表を含む表スペースで REORG ユーティリティーを実行します。
- 表がユニバーサル表スペース内にあり、表で行アクセス制御がアクティブになっていない場合は、SKIP LOCKED DATA 文節や WHERE 文節を指定せずに UPDATE ステートメントを実行します。 更新操作は検索条件付き UPDATE ステートメントを使用して行う必要があり、SET 文節内の式を scalar-fullselect や row-fullselect にすることはできません。 SELECT ステートメント内の更新操作では AREO* 状態はリセットされません。
- DROP DEFAULT 文節を指定する ALTER TABLE ステートメントを発行します。
ALTER TABLE の前に REORG が行われないか、UPDATE ステートメントで AREO* 状態がリセットされない場合、ALTER TABLE ステートメントに対してエラーが返されます。
ALTER COLUMN 文節を指定した ALTER TABLE ステートメントで DROP DEFAULT を指定して正常に実行された場合、それ以降、その ALTER TABLE ステートメントの処理より前の時点へのポイント・イン・タイム・リカバリーを要求することはできません。 
- 次のように、REORG ユーティリティーまたは UPDATE ステートメントを実行して、AREO* 状態をリセットします。
- SET GENERATED
- Db2が列の値を生成するように指定します。
SET GENERATED を指定して、既存の ID 列の生成属性を変更することができます。 この句は、既存の生成されない列を、 行開始列、 行終了列、またはトランザクション開始ID 列に変更するために指定することもできる。
- ALWAYS
- 行が挿入または更新されるときに、Db2が常に列の値を生成することを指定します。また、デフォルト値を生成する必要があります。
- BY DEFAULT
- 行が挿入または更新されるときに、Db2が常に列の値を生成することを指定します。また、明示的な値が指定されていない限り、デフォルト値を生成する必要があります。 行変更タイム・スタンプ列の場合、Db2は、指定された値を挿入または更新しますが、行変更タイム・スタンプ列にユニーク制約、または行変更タイム・スタンプ列のみを指定するユニーク索引がない限り、その列に対する値がユニークであるかどうかを検査しません。
- RESTART
- ID 列に対して後続の値を指定します。numeric-constant が無指定の場合は、ID 列を当初作成した時点の開始値として暗黙的または明示的に指定された値から、シーケンスを再開始します。 RESTART を指定しても、元の START WITH 値は変更されません。
- WITH 数値定数
- この ID 列に対して後続の値を生成する時点である場合、numeric-constant をこの列の後続の値として使用することを指定します。 この値は、この列に割り当て可能な正または負の数 (0 を含む) で、小数点の右側にゼロ以外の数字がないように指定します。
サイクルに使用される範囲は、MINVALUE および MAXVALUE によって定義されます。 numeric-constant 値は、MAXVALUE および MINVALUE による制約を受けません。 つまり、RESTART WITH 文節を使用して、循環に使用される範囲外の値の生成を開始することができます。 詳細については、 ID 列のサイクルの範囲外の START または RESTART WITH 値の指定を参照してください。
RESTART を指定しない場合、シーケンスは再始動しません。 代わりに、ALTER ステートメントの発行後、すべてのオプションに対して有効な現行値を使用して再開します。
ID 列を再始動後、または ID 列を循環可能へ変更後に、シーケンス番号が以前に生成した値と重複する可能性があります。
- 数値定数で増分を設定する
- 定義については、ID列を定義するためのINCREMENT BY numeric-constant の説明を参照してください。
- SET MINVALUE または NO MINVALUE
- 定義については、MINVALUEまたはNO MINVALUE の説明を参照してください。
- SET MAXVALUE または NO MAXVALUE
- 定義については、ID列を定義するための MAXVALUEまたはNO MAXVALUE の説明を参照してください。
- SET CYCLE または NO CYCLE
- 定義については、アイデンティティ・カラムを定義するためのCYCLEまたはNO CYCLE の説明を参照してください。
- SET CACHE または NO CACHE
- 定義については、アイデンティティ・カラムの定義における 「CACHE」または「NO CACHE」 の説明を参照してください。
- SET ORDER または NO ORDER
- 定義については、アイデンティティ・カラムを定義するためのORDERまたはNO ORDER の説明を参照してください。
ALTER COLUMN 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限の可能性、リカバリ状況への影響、その他の考慮事項については、「ポイント・イン・タイム・リカバリ」 を参照してください。
RENAME COLUMN
- RENAME COLUMN ソースカラム名 TO ターゲットカラム名
- 指定された列の名前を変更します。 この名前は修飾してはなりません。
- ソースカラム名
- 名前を変更する対象の列を指定します。 この名前は表の既存の列を示すものでなければなりません。
- 対象列名
- 列の新規名を指定します。 この名前は、表内に既に存在する列、または表内に存在する期間の名前を示すものであってはなりません。
以下のいずれかの条件に当てはまる場合、列の名前変更はできません。
- 列がビューで参照される
- 列が索引定義の式の中で参照されている
- 列が行の許可または列マスクの定義で参照される
- 列が SQL 表のユーザー定義関数で参照される
- 列にはチェック制約が定義されている
- 列にはフィールド・プロシージャーが定義されている
- 表にはトリガーがある
- 表がマテリアライズ照会表であるか、またはマテリアライズ照会表により参照される
- 表に有効なプロシージャー、または WITH ROW ATTRIBUTES として定義されている編集プロシージャーがある。
- この表は、Db2カタログ表です。
- 表が、システム期間テンポラル表、または履歴表である
- 表がアーカイブ対応表またはアーカイブ表である。
DROP COLUMN
- DROP COLUMN カラム名
- 指定の列を表からドロップします。 列に関連付けられているすべての特権が取り消されます。
以下のいずれかの条件に当てはまる場合は、列をドロップすることはできません。
- 収容表スペースがユニバーサル表スペースではない
- 表が作成済みグローバル一時表である
- 表がシステム期間テンポラル表である
- 表が履歴表である
- 表がアーカイブ対応表である
- 表がアーカイブ表である
- 表には、編集プロシージャーまたは検証出口プロシージャーがある
- 表にチェック制約が含まれる
- 表がマテリアライズ照会表である
- 表がマテリアライズ照会表定義で参照されている
- テーブル定義が不完全な状態です
- 列はテーブルの唯一の列です
- 列は期間の定義で参照されています
- 列がセキュリティー・ラベルとして定義されている
- 列が XML 列である
- 列が DOCID 列である
列が暗黙的に生成された非表示 ROWID 列である
- 列が ROWID GENERATED BY DEFAULT として定義されており、表に暗黙的に生成された非表示 ROWID 列が含まれている
- 列が、従属 LOB 列がある ROWID 列である
- 列が表パーティション・キーの一部である
- 列がハッシュ・キーの一部である
- 行に、最小データ・サイズの 3 バイト未満が含まれている
- 表内のその他の列がすべて非表示である
ビューが列に依存している
- 表に従属するビューに INSTEAD OF トリガーがある
- トリガーが表に定義されている
- 以下のいずれかのオブジェクトが表に従属している
- 拡張索引
- 行の許可
- 列マスク
- SQL 表関数
- 列名
- ドロップする列を指定します。 列名は非修飾でなければなりません。 この名前は指定した表の列を識別するものでなければなりません。
列が LOB 列である場合、その列に関連付けられているすべての補助表、およびその補助表の索引もドロップされます。 補助表に対して暗黙的に作成された LOB 表スペースもドロップされます。 列が表内の最後の LOB 列である場合、表内の暗黙的に作成されたすべての ROWID 列もドロップされます。
この条項が指定された状況によっては、 Db2 はALTER文を保留中のデータ定義変更として処理することがあり、その場合、文が発行された時点では、現在のオブジェクト定義とデータに変更が反映されていないことを意味します。 代わりに、変更されたオブジェクトは通知 REORG ペンディング (AREOR) 状態になり、変更されたオブジェクトを適切なユーティリティーで再編成すると、カタログおよびデータへの変更が具体化されます。 詳細については、「保留中のデータ定義の変更 」を参照してください。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効にする変更 」を参照してください。
- RESTRICT
- 列にビュー、索引、ユニーク制約、または参照制約が従属している場合は、列をドロップできないように指定します。
DROP COLUMN 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限事項、リカバリステータスへの影響、その他の考慮事項については、 ポイントインタイムリカバリを参照してください。
ADD PERIOD:
-
ADD PERIOD FOR
ピリオド定義 - 表に期間を追加します。
表はアーカイブ対応表やアーカイブ表であってはなりません。
begin-column-name は、end-column-name と同じであってはなりません。 begin-column-name のデータ・タイプ、精度、および位取りは、end-column-name と同じでなければなりません。
- SYSTEM_TIME( 開始列名, 終了列名 )
- 期間を指す SYSTEM_TIME。 この名前は表の既存の列を示すものであってはなりません。 テーブルにはピリオドを1つだけ使用できます。 SYSTEM_TIME ピリオドを
begin-column-name には row-begin 列を指定する必要があり、end-column-name には row-end 列を指定する必要があります。 この列は両方とも、GENERATED ALWAYS として定義されている必要があります。 列マスクや行の許可を表に対して定義してはなりません。
- BUSINESS_TIME( 開始列名, 終了列名 )
- 期間を指す BUSINESS_TIME。 この名前は表の既存の列を示すものであってはなりません。 テーブルにはピリオドを1つだけ使用できます。 BUSINESS_TIME ピリオドを
FL500 end-column-nameの値と begin-column-nameの値の関係を保証するために、以下のような暗黙のチェック制約が生成される:

- inclusive-exclusive BUSINESS_TIME 期間の場合、end-column-name の値は begin-column-name の値より大きい。
- inclusive-inclusive BUSINESS_TIME 期間の場合、end-column-name の値は begin-column-name の値より大か等しい。

FL 500 暗黙的に作成されるチェック制約の名前は DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME、その名前は既存のチェック制約の名前として定義してはなりません。 
begin-column-name と end-column-name に指定されている列は、DATE または TIMESTAMP(6) WITHOUT TIME ZONE として定義されている必要があり、さらに NOT NULL として定義されている必要があります。 begin-column-name と end-column-name に指定されている列は、GENERATED 文節で定義された列を示すものであってはなりません。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効にする変更 」を参照してください。
- 開始列名
- 期間の開始値を記録する列を指定します。 この名前は表の既存の列を示している必要があります。 begin-column-name は、表の別の期間の定義で使用されている列と同じであってはなりません。
- エンドカラム名
- 期間の終了値を記録する列を指定します。 この名前は表の既存の列を示している必要があります。 end-column-name は、表の別の期間の定義で使用されている列と同じであってはなりません。
EXCLUSIVE 
FL 500 終了列の値が期間に含まれないことを指定します。 BUSINESS_TIME 期間は inclusive-exclusive として定義されます。 
INCLUSIVE 
FL 500 終了列の値が期間に含まれることを指定します。 BUSINESS_TIME 期間は inclusive-inclusive として定義されます。 
ADD ユニーク制約
- 制約 constraint-name
- 主キー制約またはユニーク・キー制約の名前を指定します。 制約名を指定しないと、ユニーク制約名が生成されます。 名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。 この表スペースが暗黙的に作成される場合、適用する主キーとユニーク・キーの索引も暗黙的に作成されます。
- 主キー (列名、... )
- 指定された列で構成される主キーを定義します。 各列名は、表の列を識別する非修飾
名でなければなりません。 同じ列を複数回指定してはいけません。 PRIMARY KEY 文節では、以下のタイプの列は指定できません。
- LOB 列
- ROWID 列
LOBまたはROWIDデータ型に基づく FL 505a 識別型列
- XML 列
- 行変更タイム・スタンプ列
FL 500 キー内のすべての文字およびグラフィック文字列列では、同じエンコード スキームを使用する必要があります。
FL505 識別される列の数は64列を超えてはならない。 さらに、列の長さ属性の合計は 2000 - n - 2 m - 3 d を超えてはなりません。ここで、 m は可変長列の数、 d はキー内の DECFLOAT 列の数です。 表には主キーがあってはならず、
指定する列は NOT NULL として定義されているものでなければなりません。
主キー内の列セットは、別のユニーク・キーの列セットと同じにすることはできません。
この表には、主キーと同じユニーク・キーを持ったユニーク索引がなければなりません。 これら 2 つのキーは、同数の列を持ち、一方のキーの n 列目の名前がもう一方のキーの n 列目の名前と 同じ場合にのみ、同一のキーとなります。 表が暗黙的に作成された表スペース内にあり、識別された列にユニーク索引が定義されていない場合、Db2は自動的に 1 次索引を作成します。 特権セットには、表に関する INDEX 特権、およびバッファー・プールおよびストレージ・グループに関する USE 特権が含まれていなければなりません。 暗黙的に作成された主キー索引は、基本表の所有者によって所有されます。
指定した列が、表の主キーとして定義されます。 索引の記述は、それが 1 次索引であることを示すように変更されます。 主キーと同一のキーを持つユニーク索引が表に複数ある場合、 そのどれが 1 次索引として選択されるのかは決まっていません。
- BUSINESS_TIME WITHOUT OVERLAPS
- BUSINESS_TIME
WITHOUT OVERLAPS は、リストの最後の項目として指定できます。 BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、リストには 1 つ以上の column-name または key-expression が含まれている必要があります。 WITHOUT OVERLAPS が指定されている場合、これ以降に指定されているキーの値は、BUSINESS_TIME 期間にわたって固有です。 BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、制約に以下の列が追加されます。
- BUSINESS_TIME 期間の終了列 (昇順)
- 昇順での BUSINESS_TIME 期間の開始列
- UNIQUE (列名,…)
- 指定した constraint-name を持つ、
識別された列から構成されるユニーク・キーを定義します。 constraint-name を指定しないと、名前が生成されます。 各列名は、表の列を識別する非修飾
名でなければなりません。 同じ列を複数回指定してはいけません。 UNIQUE 文節では、以下のタイプの列は指定できません。
- LOB 列
- ROWID 列
LOBまたはROWIDデータ型に基づく FL 505a 識別型列
- XML 列
- 行変更タイム・スタンプ列
FL 505各特定列は、NOT NULL として定義する必要があります。 指定する列の数は 64 を超えてはいけません。 さらに、列の長さ属性の合計は、埋め込みインデックスの場合は 2000 - n を超えず、埋め込みなしインデックスの場合は 2000 - n - 2 m - 3 d を超えてはいけません。ここで、 n は NULL 値を含めることができる列の数、 m は可変長列の数、 d はキー内の DECFLOAT 列の数です。 
ユニーク・キー内の列セットは、主キーまたは別のユニーク・キーの列セットと 同じにすることはできません。 ユニーク・キーは、主キーまたは既に定義済みのユニーク・キーと同じ 場合に、重複キーとなります。 重複するユニーク・キーを指定すると、警告が出て無視されます。
表には、ユニーク・キーと同じキーを持つユニーク索引がなければなりません。 これら 2 つのキーは、同数の列を持ち、一方のキーの n 列目の名前がもう一方のキーの n 列目の名前と 同じ場合にのみ、同一のキーとなります。 表が暗黙的に作成された表スペース内にあり、識別された列にユニーク索引が定義されていない場合、Db2は自動的にユニーク索引を作成してユニーク・キー制約を実施します。 特権セットには、表に関する INDEX 特権、およびバッファー・プールおよびストレージ・グループに関する USE 特権が含まれていなければなりません。 暗黙的に作成されたユニーク・キー索引は、基本表の所有者によって所有されます。
識別した列が、表のユニーク・キーとして定義されます。 索引の記述は、それがユニーク・キー制約を実施することを示すように変更されます。 ユニーク・キーと同一のキーを持つユニーク索引が表に複数ある場合、 実施索引の選択は任意に行われます。
- BUSINESS_TIME WITHOUT OVERLAPS
- BUSINESS_TIME
WITHOUT OVERLAPS は、リストの最後の項目として指定できます。 BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、リストには 1 つ以上の column-name または key-expression が含まれている必要があります。 WITHOUT OVERLAPS が指定されている場合、これ以降に指定されているキーの値は、BUSINESS_TIME 期間にわたって固有です。 BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、制約に以下の列が追加されます。
- BUSINESS_TIME 期間の終了列 (昇順)
- 昇順での BUSINESS_TIME 期間の開始列
ADD referential-constraint
- 制約 constraint-name
- 参照制約の名前を指定します。 制約名を指定しないと、ユニーク制約名が生成されます。 名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。
- 外部キー (列名、... ) references-clause
- 指定した constraint-name を持つ参照制約を指定します。
表が履歴表またはアーカイブ表である場合は、FOREIGN KEY を指定できません。
T1 が ALTER TABLE ステートメントのオブジェクト表を表すものとします。 T1 は、参照制約の子表です。
FL 500 参照制約の外部キーは、識別された列と、PERIOD BUSINESS_TIME 句が指定されている場合は BUSINESS_TIME 期間の列で構成されます。 この column-name は、T1 の列を識別する非修飾 名でなければなりません。 同じ列を複数回指定してはいけません。 PERIOD BUSINESS_TIME が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。 FOREIGN KEY 文節では、以下のタイプの列は指定できません。- LOB 列
- ROWID 列
- DECFLOAT 列
- XML 列
- LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
- セキュリティー・ラベル列
- 行変更タイム・スタンプ列
PERIOD BUSINESS_TIME が FOREIGN KEY 文節で指定されている場合、PERIOD BUSINESS_TIME を REFERENCES 文節でも指定する必要があります。 PERIOD BUSINESS_TIME が FOREIGN KEY 文節で指定されていない場合、PERIOD BUSINESS_TIME は REFERENCES 文節でも指定されていてはなりません。
PERIOD BUSINESS_TIME が FOREIGN KEY 文節で指定されている場合、親表と子表の両方で BUSINESS_TIME 基幹のセマンティックが同じでなければなりません。
参照制約の外部キーは、BUSINESS_TIME WITHOUT OVERLAPS を含む親キーを参照できません。
- 参照親テーブル名 (カラム名,...)
- REFERENCES の後に指定される表名は、参照制約の親表です。 親テーブル名の値は、現在のサーバーに存在するテーブルを特定する必要があります。 この表は、制約関係における親表と呼ばれます。
parent-table-name は識別してはならない
- カタログ表
ディレクトリー表
- 宣言済みグローバル一時表
- 履歴表
- アーカイブ表
T2 は親表を示し、T1 は変更対象の表を示すものとします。(T1 と T2 は同じ表にすることができます。)
T2 はユニーク索引を持っている必要があります。 T2 の特権セットには親表の ALTER 特権または REFERENCES 特権が含まれているか、候補の親キーの列についての REFERENCES 特権が含まれていなければなりません。PERIOD BUSINESS_TIME 文節が指定されている場合、これには BUSINESS_TIME 期間の列が含まれます。
参照制約の親キーは、指定された列と BUSINESS_TIME 期間の列 (PERIOD BUSINESS_TIME が指定される場合) から構成されます。 各 column-name は、T2 の列を指定する非修飾名でなければなりません。 同じ列を複数回指定してはいけません。 PERIOD BUSINESS_TIME が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。 REFERENCES 文節では、以下のタイプの列は指定できません。
- LOB 列
- ROWID 列
- DECFLOAT 列
- XML 列
- LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
- セキュリティー・ラベル列
- 行変更タイム・スタンプ列
FL 500 親キーのカラム名のリストは、親テーブルの主キーまたは一意キーのカラム名のリストと一致しなければならない T2。 列名は主キーまたはユニーク・キー内と同じ順序で指定し
なければなりません。 親表 T2 の主キーまたはユニーク・キーに PERIOD BUSINESS_TIME が指定されている場合、PERIOD BUSINESS_TIME を T1 の外部キー文節にも指定する必要があります。 T2 内のいずれかの参照列に非数値のデータ・タイプがある場合、T2 が Unicode 表であり、T1 が Unicode キー列を持つ EBCDIC 表である場合を除き、T1 は同じコード化スキームを使用する必要があります。 その場合は、T1 の文字列またはグラフィック・ストリング列列ごとに、CCSID が T2 内の対応する列と同じでなければなりません。
列名のリストが指定されていない場合、T2 には主キーが必要になります。 列名のリストを省略する場合は、T2 の主キーの列の暗黙的指定になります。
指定した外部キーは T2 の親キーと同じ列数でなければなりません。また、その名前、デフォルト値、NULL 属性およびチェック制約以外の外部キーの n 列の記述は、候補の親キーの n 列の記述と同じでなければなりません。 外部キーに特殊タイプとして定義されている列が含まれている場合、候補の親キーの対応する列は同じ特殊タイプでなければなりません。 外部キーの列にフィールド・プロシージャーがある場合、候補の親キーの対応する列には同じフィールド・プロシージャーおよび同一のフィールド記述がなければなりません。 フィールド記述 は、関連するフィールド・プロシージャー を持つものとして定義された列について、データベースに格納されるときの エンコードされた値を記述したものです。
T1 が含まれている表スペースは、Db2で使用可能でなければなりません。 T1 にデータが追加されると、表スペースはチェック・ペンディング状況になります。 表が空でない場合は、セグメント化表スペース内の表にデータが取り込まれています。 セグメント化されていない表スペース内の表は、表スペースに レコードが以前に含まれていた場合は、データが入っているものと見なされます。
FOREIGN KEY 文節で指定した参照制約は、T2 が親で T1 が 従属となる関係を定義します。 参照制約の記述は、カタログに記録されます。
- PERIOD BUSINESS_TIME
- FL 500 BUSINESS_TIME 期間が参照制約の一部とみなされることを指定します。 PERIOD BUSINESS_TIME が指定される場合、指定されたその他の列の値は、任意の時点において固有値です。
PERIOD BUSINESS_TIME は、最後のキー式として指定できます。 PERIOD BUSINESS_TIME が最後のキー式でない場合は、エラーが返されます。 PERIOD BUSINESS_TIME が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。
PERIOD BUSINESS_TIME が指定されると、以下の列が制約の最後に暗黙的に追加されます。- BUSINESS_TIME 期間の終了列。
- BUSINESS_TIME 期間の開始列。
PERIOD BUSINESS_TIME 文節は、行の BUSINESS_TIME 期間値で表された期間が親表の対応する行の BUSINESS_TIME 期間に含まれていない行が子表にあってはならないことを指定します。 さらに、BUSINESS_TIME 期間に子行の BUSINESS_TIME 期間が含まれている対応する行が正確に 1 つ親表に含まれているとは限りません。 子表の行の BUSINESS_TIME 期間が親表の複数の連続した一致行の BUSINESS_TIME 期間の和集合に含まれている限り、参照制約は満たされていると見なされます。
FOREIGN KEY 文節が PERIOD BUSINESS_TIME 文節を指定する場合、以下の条件が適用されます。- 対応する REFERENCES 文節が、PERIOD BUSINESS_TIME 文節も指定する必要があります。
- BUSINESS_TIME WITHOUT OVERLAPS 文節が指定されたユニーク索引が表で定義されている必要があります。 索引が作成されるまで、表には使用不能のマークが付けられます。
- ユニーク索引は、親表で BUSINESS_TIME WITHOUT OVERLAPS 文節を指定されて定義される必要があります。
PERIOD BUSINESS_TIME も指定されている場合、 ON DELETE RESTRICT を指定する必要があります。
- ON DELETE
- 関係の削除規則は、ON DELETE 文節によって決まります。 ここで使用されている概念の詳細については、「参照制約」 を参照してください。
T1 と T2 が同じ表の場合には、CASCADE または NO ACTION を指定しなければなりません。 SET NULL は、外部キーの列に NULL 可能な列がない限り指定してはなりません。 また、外部キーの NULL 可能列がパーティション索引のキー列である場合も、SET NULL を指定してはなりません。 規則のデフォルト値は、ALTER TABLE ステートメントが処理されるときの CURRENT RULES 特殊レジスターの値によって決まります。 レジスターの値が「DB2」の場合は、削除規則のデフォルトは RESTRICT です。値が「SQL」の場合は、削除規則のデフォルト値は NO ACTION です。
削除規則は、T2 の行が DELETE または伝搬による削除操作の対象であり、 その行の従属行が T1 にある場合に、適用されます。 p は、T2 のそのような行を表すと想定します。
- RESTRICT または NO ACTION を指定すると、エラーになり、行は削除されません。
- CASCADE を指定すると、 T1 の p の従属行に削除操作が伝搬します。
- SET NULL が指定された場合、 T1 にある、p の各従属行の外部キーで、NULL 可能な列が NULL 値に設定されます。
複数の表が関係するサイクルでは、表をそれ自身に連結削除させてはなりません。 したがって、サイクルの形になる関係の場合は、次のようになります。
- サイクルの一部となる既存の関係が、それぞれ CASCADE と いう削除規則を持つ場合には、参照制約を定義できません。
- T2 が T1 に連結削除される場合には、CASCADE を指定してはなりません。
T1 が複数の経路を通じて T2 に連結削除される場合、T1 が 従属表となり、かつこれらの経路のすべてまたはその一部を形成 する関係は、同じ削除規則を持っていなければなりません。 また、この規則を SET NULL にすることはできません。 例えば、削除規則 r を持つ関係において T1 が T3 の 従属表となっており、以下のいずれかに該当するものとします。
- T2 と T3 が同じ表である。
- T2 が T3 の下層表であり、T3 から行を削除するとそれが T2 にカスケードする。
- T2 と T3 がともに同じ表の下層表であり、その表から行を 削除するとそれが T2 と T3 の両方にカスケードする。
この場合は r が SET NULL であると、 参照制約は定義できません。 r が SET NULL 以外であれば参照制約の定義はできますが、 FOREIGN KEY 文節で暗黙的または明示的に指定する削除規則は 、r と 同じでなければなりません。
- ENFORCED または NOT ENFORCED
- 挿入、更新、削除などの通常の操作中、Db2による参照制約が強制されるかどうかを示します。
- ENFORCED
- 通常の操作 (挿入、更新、または削除など) で参照制約がDb2によって実施され、それが正しいことが保証されることを指定します。 ENFORCED がデフォルトです。
- NOT ENFORCED
- 挿入、更新、または削除などの通常の操作中、Db2による参照制約が強制されないことを指定します。 NOT ENFORCED は、表に保管されているデータが、Db2に依存する以外の方法で制約に準拠することが確認されている場合にのみ使用する必要があります。
- ENABLE QUERY OPTIMIZATION
- 照会を最適化するためにこの制約を使用できることを指定します。 Db2 クエリ最適化に情報を使用し、制約が正しいという前提で、実体化されたクエリテーブルを使用します。 これはデフォルトです。
ADD 検査制約
- 制約 constraint-name
- チェック制約の名前を指定します。 constraint-name を指定しない場合、チェック制約の定義で指 定した check-condition の最初の列名から、ユニーク制約名が導き出されます。 名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。
- CHECK (チェック状態 )
- チェック制約を定義します。 表のそれぞれの行に対して、check-condition がいつでも真または不明であることが必要です。 check-condition は、述部のオペランドである列が NULL の場合に、不明と評価されることがあります。 不明と評価される check-condition は、チェック制約に違反してはいません。 check-condition は検索条件であり、以下の制約事項があります。
これは、table-name で指定されたテーブルの列名のみを指すことができます。 各列名は修飾されていない名前でなければなりません。
- 列は、次のタイプの列であってはなりません。
- LOB 列
- ROWID 列
- DECFLOAT 列
- XML 列
- LOB、ROWID、および DECFLOAT データ・タイプに基づく特殊タイプ列
- セキュリティー・ラベル列
FL 500CCSID変換を引き起こしてはならない。
- 重複ブランクを含めずに、7400 バイトまでの長さです。
- 以下のいずれも含めてはなりません。
- 副選択
- 組み込み関数またはユーザー定義関数
- CAST 指定
- 特殊タイプの作成時に作成されたものを除く cast 関数
- ホスト変数
- グローバル変数
- パラメーター・マーカー
- 特殊レジスター
- フィールド・プロシージャーを含む列
- CASE 式
- ROW CHANGE 式
Row-value 式
- DISTINCT 述部
- GX 定数 (16 進グラフィック・ストリング定数)
- シーケンス参照
- OLAP 指定
- check-condition が LOB 列 (LOB に基づく特殊タイプを含む) を参照する場合、参照は LIKE 述部内で行う必要があります。
- 述部間で、AND および OR 論理演算子を使用できます。 NOT 論理演算子は使用できません。
- 各述部の第 1 オペランドは、表中の列の列名でなければ なりません。
- check-condition の第 2 オペランドは、定数かまたは
表中の列の列名のいずれかでなければなりません。
- 述部の第 2 オペランドが定数である場合、次のことが言えます。
- 定数が浮動小数点数である場合、列データ・タイプは浮動小数点でなければなりません。
- 定数が 10 進数である場合、列データ・タイプは浮動小数点か または 10 進数のいずれかになります。
- 定数が長精度整数である場合、列データ・タイプは整数または短精度整数にしないでください。
- 定数が整数である場合、列データ・タイプは短精度整数にはなりません。
- 定数が短精度整数である場合、列データ・タイプは短精度整数になります。
- 定数が 10 進定数である場合、その精度は列の精度よりは大きくなりません。
- 述部の第 2 オペランドが列である場合、述部の両方の列は、
以下のようでなければなりません。
- データ・タイプが同じ。
- 記述が同じ。ただし、列の NOT NULL と DEFAULT 文節の指定は 異なっていてもかまいません。また、 同じデータ・タイプのストリング列に別の長さ属性があってもかまいません。
- 述部の第 2 オペランドが定数である場合、次のことが言えます。
データが読み込まれる表におけるチェック制約定義の影響: データが読み込まれる表でチェック制約が定義され、特殊レジスター CURRENT RULES の値が「DB2」である場合、チェック制約はすぐに表に反映されるわけではありません。 チェック制約が表の記述に追加され、表を含む表スペースが チェック・ペンディング状況になります。 保留中のチェックステータスとユーティリティ操作への影響については、「保留中のチェック(CHECK-pending)」 を参照してください。
データを読み込まれる表でチェック制約が定義され、特殊レジスター CURRENT RULES の値が「STD」である場合、チェック制約は表のすべての行に対して検査されます。 違反がなければ、チェック制約が表に追加されます。 新しいチェック制約に違反する行がある場合、 エラーが発生して表の記述は未変更となります。
DROP 制約
- DROP PRIMARY KEY
- 主キーの定義と、その主キーが親キーになっている
すべての参照制約をドロップします。 表は主キーを持っていなければなりません。
また、特権セットに、その表の各従属表に対する ALTER
または REFERENCES
特権が含まれていなければなりません。
1 次索引の記述は、それが 1 次索引でないことを示すように変更されます。 表スペースを暗黙的に作成済みの場合、対応する適用索引は、主キーがドロップされると、ドロップされます。
- DROP UNIQUE 制約名
- ユニーク・キー制約の定義と、そのユニーク・キーが親キーになっている場合の すべての参照制約をドロップします。 表にはユニーク・キーがなければなりません。 特権セットには、その表の各従属表に対する ALTER または REFERENCES 特権が 含まれていなければなりません。 実施索引の記述は、それがユニーク・キー制約を適用しないことを示すように変更されます。 表スペースを暗黙的に作成すると、対応する適用索引は、ユニーク・キーがドロップされるとドロップされます。
- FOREIGN KEY制約名を削除する
- 制約名が constraint-name の参照制約をドロップします。 constraint-name は、 表が従属表になっている場合の参照制約を識別する必要があり、特権セットには、 その関連の親表の ALTER 特権または REFERENCES 特権が含まれているか、 またはその関連の親表の列の REFERENCES 特権が含まれていなければなりません。
- DROP CHECK 制約名
- 制約名が constraint-name のチェック制約をドロップします。 constraint-name には、表で定義された既存のチェック制約を指定する必要があります。
- 制約名 DROP CONSTRAINT
- 制約名が constraint-name の制約をドロップします。 constraint-name は、
表に定義された既存の主キー制約、ユニーク・キー制約、チェック制約、または
参照制約を識別しなければなりません。
DROP CONSTRAINT は 、DROP PRIMARY KEY、DROP UNIQUE KEY、 DROP FOREIGN KEY、 または DROP CHECK と同じ ALTER TABLE ステートメントで使用してはなりません。
範囲による追加パーティショニングパーティショニング句
表の範囲のパーティション・スキームを指定します (データをパーティション化するために使用される列)。 RANGEキーワードはオプションです。
この文節を指定すると、表は表制御パーティションを使用します。 ADD PARTITION BY RANGE 文節に指定するパーティションの数は、表スペースに定義されているパーティション数と同じにする必要があります。
この文節は、パーティション化表スペース内の表のみに適用されます。 表制御パーティションまたは索引制御パーティションのどちらかを設定して、表が既に完成している場合は、ADD PARTITION BY RANGE 文節は使用できません。 この節が使用された場合、このテーブルに対するその後のCREATE INDEX文でENDING AT節を使用することはできません。
partitioning-clause
- くぶんしき
- キー・データを指定します。このキー・データに対して、ターゲット・データ・パーティションを決定するための範囲を定義します。
- 列名
- キーの列を指定します。 各 column-name には、この表の列を指定する必要があります。 65 列以上の列を指定しないでください。また、同一列を複数回指定しないでください。修飾した列名や、以下のタイプの列も指定しないでください。
- BINARY 列または VARBINARY 列
- LOB 列
- DECFLOAT 列
- XML 列
- 前述のいずれかのデータ・タイプに基づく特殊タイプの列
FL 500 キー内のすべての文字列列とグラフィック列は、同じエンコーディング方式を使用する必要があります。
列の長さ属性の合計は、255 - n を超えてはなりません (ここで、n は NULL 値を格納できる列の数)。
タイム・ゾーン付きタイム・スタンプ列 (またはタイム・ゾーン付きタイム・スタンプ・データ・タイプに基づく特殊タイプの列) は、パーティション・キーの最後の列としてのみ指定できます。
- NULLS LAST
- 比較のために、NULL 値を正の無限大として扱うように指定します。
- ASC
- 項目を列の昇順で並べます。 ASC がデフォルトです。
- DESC
- 項目を列の降順で並べます。
- partition-element
- データ・パーティション・キーの範囲と、その範囲内の表の行を保管する表スペースを指定します。
- パーティション 整数
- 表スペース内の物理的なパーティション数 を指定します。 PARTITION 文節は、表スペースのすべてのパーティションに対して指定する必要があります。 以下の文章での最高と は、列のソート・シーケンスの中で最高であることを意味します。 昇順 (ASC) と して定義された列においては、最高と最低がその言葉通りの意味を持ちます。 降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。
- ENDING AT (constant、MAXVALUE、または MINVALUE...)
- パーティション境界の限界キーを指定します。 各PARTITION句のENDING ATの後には、少なくとも1つの値(定数、MAXVALUE、またはMINVALUE)を指定します。 キーの中の列と同じ数だけ値を使うことができます。 すべての値を連結したものが、昇順の場合はキーの最高値、降順の場合は最低値になります。
- 定数
- 定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。 ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。 列が昇順の場合、埋め込み文字は X'FF' です。 列が降順の場合、埋め込み文字は X'00' です。 10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。 16 進数ストリング定数 (GX) は指定できません。
- MAXVALUE
- パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。 パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。 MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
- MINVALUE
- パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。 パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
このキー値は以下の規則に制約されます。- 最初の値がキーの 1 列目に対応し、2 番目の値が 2 列目に 対応するといった形で、以下同様に続いていきます。 キーにある列数より少ない数の値を使用すると、列が昇順か降順かに応じて、省略した列に対して最高値または最低値を使用した場合と同じ効果があります。
- どのパーティションにおいても、キーの最高値は、次のパーティション内のキーの 最高値より低位でなければなりません。
- 最終パーティションに対して指定した値が適用されます。 最終パーティションに対して指定される値は、表に置くことができるキーの最高値です。 限界が以前に適用されなかった場合、追加したパーティションに対して指定した値より大きな既存キー値は、REORG の実行時に DISCARD データ・セットに置かれます。
- キーに ROWID 列または ROWID データ・タイプに基づく特殊タイプの列が含まれている場合は、対応する ROWID 列に対して指定された定数の先頭 17 バイトが使用されます。
- 表スペースのパーティション数とそれに対応する限界キー・サイズの組み合わせは、パーティション数 * (106 + 限界キー・サイズのバイト数) (<65394) を超えてはいけません。
- すべての値の連結が 255 バイトを超える場合は、先頭 255 バイトのみが使用されます。
- INCLUSIVE
- 範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
ADD PARTITION
- ADD PARTITION
FL 500 テーブルおよびテーブル上の各パーティション化インデックスにパーティションが追加されることを指定します。 パーティションは、任意のパーティション化表スペースの最後の論理パーティションとして追加できます。 パーティションは、範囲パーティション化表スペースの既存の論理パーティション間に追加することもできます。 新規パーティションは、次の物理パーティションであり、表スペースが最大に達するまでは使用されません。 ADD PARTITION は、非パーティション表に対して指定してはなりません。 表がマテリアライズ照会表である場合、またはマテリアライズ照会表が表に対して定義されている場合は、パーティションを追加できません。 ただし、表に対してアクセラレーテッド照会表が定義されている場合は、パーティションの追加が許可されます。
この節が指定された場合の状態によって、Db2が ALTER ステートメントを保留中のデータ定義変更として処理する場合があります。これは、現行のオブジェクト定義およびデータが、ステートメントが発行された時点での変更を反映していないことを意味します。 代わりに、影響を受ける区画は通知 REORG ペンディング (AREOR) 状態になり、影響を受ける区画を適切なユーティリティーで再編成すると、カタログおよびデータへの変更が具体化されます。 詳細については、「保留中のデータ定義の変更 」を参照してください。
FL 500 テーブルの最後の論理パーティションとしてパーティションを追加すると、そのパーティションがテーブルおよびテーブル上の各パーティション化インデックスに追加されることを指定します。 最後の論理パーティションとして追加されたパーティションは、常に即時の定義変更です。 パーティション・キーまたはパーティション索引が欠落しているために表スペース定義が不完全な場合は、パーティションを追加できません。 表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 さらに、パーティションに未解決の保留中定義変更がある場合、表の最後にパーティションを追加することは許可されません。
FL 500既存の論理パーティション間にパーティションを追加する操作は、範囲ベースのパーティションテーブルスペースでのみサポートされます。 既存のパーティションの間に新規パーティションを挿入する場合、以下の規則が適用されます。- オプションの ALTER PARTITION が指定された ADD PARTITION ENDING を使用して、既存のパーティションの間に新規パーティションを追加する場合、ALTER PARTITION 文節に、追加するパーティションのすぐ次の論理パーティションを指定する必要があります。 ALTER PARTITION 文節に指定される最高限界キー値は、すぐ次の論理パーティションの既存の最高限界キー値でなければなりません。 新規パーティションを挿入するときに同じステートメントで最高限界キー値を変更することはできません。
- パーティションを同じ表内の既存のパーティションの間に追加する前に、最後の論理パーティションの最高限界キーに対する保留中の定義変更がマテリアライズされる必要があります。
- 表の既存のパーティションの間に新規パーティションが追加された後、新しく挿入されたパーティションが REORG 実行によってマテリアライズされるまで、同じ表内のどのパーティションに対する限界キーの変更も許可されません。
- パーティションは、LOB 列、または LOB データ・タイプに基づく特殊タイプの列を含む表には挿入できません。
- パーティションは、XML 列を含む表には挿入できません。

表が増加対応パーティション表スペースにある場合は、パーティションの数が MAXPARTITIONS 制限に達するまで、新規パーティションを追加できます。 表スペース・パーティションの総数が、表スペースの MAXPARTITIONS に指定されている値を超えることはできません。
FL 500 デフォルトのDSSIZEは、カタログテーブル SYSIBM.SYSTABLESPACE 内の値によって決定されます。 許可されるパーティションの最大数を次の表に示します。
表 6. 許されるパーティションの最大数 DSSIZE ページ・サイズ 4 KB ページ・サイズ 8 KB ページ・サイズ 16 KB ページ・サイズ 32 KB 1GB-4GB 4096 4096 4096 4096 8GB 2048 4096 4096 4096 16GB 1024 2048 4096 4096 32GB 512 1024 2048 4096 64GB 256 512 1024 2048 128GB 128 256 512 1024 256GB 64 128 256 512 テーブルスペースの作成時にLARGEが指定された場合、最大パーティション数は表7 の4行目に示されています。 LARGE または DSSIZE を指定しないときにパーティション数が 254 を超える場合、パーティションの最大数は表スペースのページ・サイズによって決まります。表 7. DSSIZE = 0 の場合のパーティションの最大数 表スペースのタイプ 既存パーティション数 最大パーティション数 非 LARGE 1 から 16 16 非 LARGE 17 から 32 32 非 LARGE 33 から 64 64 large 該当なし 4096
新規パーティションは、新規パーティションの位置およびその他の要因に応じて、表スペースまたは前の最後の論理パーティションからほとんどの属性を継承します。 詳細については、「追加されたパーティションの属性を決定 Db2 する方法」 を参照してください。
追加されたパーティションの特定の属性を変更するには、パーティションを追加した後に、ALTER TABLESPACE および ALTER INDEX ステートメントを個別に発行することができます。
表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 Db2 テーブル制御パーティショニングに対して上限キーを強制するため、REORG実行時には上限キーを超える既存のキー値はすべて破棄データセットに配置される。
HASH SPACE は、ADD PARTITION と組み合わせて指定できません。 増加対応パーティション表スペースでは、パーティション・レベルでハッシュ・スペース値を適用できません。
- ENDING AT (constant、MAXVALUE、または MINVALUE、...)
- 新規パーティションの高いキー限界を指定します。
- INCLUSIVE
- 範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
- partition-hash-space
- partition-hash-space を参照してください。
ADD PARTITION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限事項、復旧ステータスへの影響、その他の考慮事項については、 ポイントインタイムリカバリを参照してください。
ALTER PARTITION
- ALTER PARTITION
- 指示したパーティションのパーティションに対するパーティション限界キーを変更することを指定します。
この文節は、パーティション化表スペース内の表のみに適用されます。 ALTER PARTITION は、partition-by-growth 表スペースにある表に対して、または XML 列のある表に対して、指定してはなりません。 パーティションごとの表スペースの表の中間に新規パーティションを挿入するための保留中の定義変更がある場合、新しく挿入されたパーティションが REORG 実行によってマテリアライズされるまで、同じ表内のパーティションに制限キーを変更することは許可されません。
表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 最終パーティションに対する最高限界キーは、昇順キー列の場合は可能な最大値、降順キー列の場合は可能な最小値に設定されます。
変更は即時に実行され、変更されたパーティションは REORG ペンディング (REORP) 状況になります。 変更されたパーティションが最後の論理パーティションでない場合、次の論理パーティションも再編成待機(REORP)状態に置かれます。
- 整数
テーブル内のパーティション数 n に対して、 1 から n の範囲内の物理パーティション番号を特定します。 integer は物理パーティション番号です。この節が指定された場合の状態によって、Db2が ALTER ステートメントを保留中のデータ定義変更として処理する場合があります。これは、現行のオブジェクト定義およびデータが、ステートメントが発行された時点での変更を反映していないことを意味します。 代わりに、影響を受ける区画は通知 REORG ペンディング (AREOR) 状態になり、影響を受ける区画を適切なユーティリティーで再編成すると、カタログおよびデータへの変更が具体化されます。 詳細については、「保留中のデータ定義の変更 」を参照してください。
即時変更を使用すると、その変更は影響を受けるパーティションを REORG ペンディング (REORP) 状況にします。integer が最後の論理パーティションを識別する場合、パーティション・データ・セットにはこれまでにデータが含まれており、限界キーは MAXVALUE (昇順の場合) または MINVALUE (降順の場合) から別の値に変更されます。

- ENDING AT (constant、MAXVALUE、または MINVALUE...)
- 指定したパーティションのパーティション・キーの最高値を指定します。
ここで言う最高とは、列のソート・シーケンスの中で最高であることを意味します。 昇順 (ASC) と して定義された列においては、最高と最低がその言葉通りの意味を持ちます。 降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。
各 ALTER PARTITION 文節の ENDING AT の後には、値を少なくとも 1 つ指定します。 キーの中の列と同じ数だけ値を使うことができます。 すべての値を連結したものが、対応するパーティション内のキーの最高値となります。 それぞれの最高キー値 (限界キーとも呼ばれる) の長さは、パーティション・キーの長さと同じです。- 定数
- 定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。 ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。 列が昇順の場合、埋め込み文字は X'FF' です。 列が降順の場合、埋め込み文字は X'00' です。 10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。 16 進数ストリング定数 (GX) は指定できません。
- MAXVALUE
- パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。 パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。 MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
- MINVALUE
- パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。 パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
このキー値は以下の規則に制約されます。- 最初の値がキーの 1 列目に対応し、2 番目の値が 2 列目に 対応するといった形で、以下同様に続いていきます。 キーにある列数より少ない数の値を使用すると、列が昇順か降順かに応じて、省略した列に対して最高値または最低値を使用した場合と同じ効果があります。
- どのパーティションにおいても、キーの最高値は、次のパーティション内のキーの 最高値より低位でなければなりません。
- 最終パーティションに対して指定した値が適用されます。 最終パーティションに対して指定される値は、表に置くことができるキーの最高値です。 限界が以前に適用されなかった場合、追加したパーティションに対して指定した値より大きな既存キー値は、REORG の実行時に DISCARD データ・セットに置かれます。
- キーに ROWID 列または ROWID データ・タイプに基づく特殊タイプの列が含まれている場合は、対応する ROWID 列に対して指定された定数の先頭 17 バイトが使用されます。
- 表スペースのパーティション数とそれに対応する限界キー・サイズの組み合わせは、パーティション数 * (106 + 限界キー・サイズのバイト数) (<65394) を超えてはいけません。
- すべての値の連結が 255 バイトを超える場合は、先頭 255 バイトのみが使用されます。
指定する値は、隣接するパーティションのパーティション境界の範囲と等しいか範囲外にあってはなりません。
- INCLUSIVE
- 範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
- partition-hash-space
- partition-hash-space を参照してください。
ALTER PARTITION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限事項、復旧ステータスへの影響、その他の考慮事項については、 ポイントインタイムリカバリを参照してください。
ROTATE PARTITION
- ROTATE PARTITION FIRST または整数 TO LAST
- 最初の論理パーティションまたは integer に対応する物理パーティションを循環させて最後のパーティションにするように指定します。 指定されたパーティションが処理で空にリセットされ、そのパーティションに関連付けられている限界キーは境界指定節で指定される定数に設定されます。 昇順限界キーの場合、新規限界キーは、このステートメントが処理される前の既存の最後の論理パーティションの限界キーより高くする必要があります。 降順限界キーの場合、新規限界キーは、このステートメントが処理される前の既存の最後の論理パーティションの限界キーより低くする必要があります。
表の定義が完了しており、複数のパーティションを含んでいなければなりません。 この節の後に、論理的に最後の新しいパーティションの新しい上限値を指定する ENDING AT 節を記述する必要があります。
パーティションの循環は即時に行われます。 DELETE RESTRICT を指定した参照制約が表にある場合、ROTATE は失敗する可能性があります。 表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。
ROTATE PARTITION 文節を指定した ALTER TABLE ステートメントの実行後に、RUNSTATS ユーティリティーまたは STATISTICS オプションを指定した REORG ユーティリティーを表スペースに対して実行して、効率的なアクセス・パスが選択対象になるようにする必要があります。
表にセキュリティー・ラベル列がある場合、パーティションを循環させるユーザーは有効なセキュリティー・ラベルを持っている必要があります。 また、write-down (ライトダウン) が有効になっている場合、ユーザーには write-down privilege (ライトダウン特権) が必要です。
ROTATE PARTITION は、以下の状態では指定してはなりません。
- 表が、増加対応パーティション表スペース内にある。
- 表に XML 列 があります。
- 表が、システム期間テンポラル表、または履歴表です。
- 表がアーカイブ対応表またはアーカイブ表である。
アクセラレーテッド照会表が表に定義されている場合は、パーティションを追加できます。
表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 Db2 テーブル制御パーティショニングに対して上限キーを強制するため、REORG実行時には上限キーを超える既存のキー値はすべて破棄データセットに配置される。
- 整数
- SYSIBM.SYSTABLEPART カタログ表の PARTITION 列で識別される物理パーティション番号を表す正整数を指定します。 そのパーティションは、その表に存在するデータ・パーティションである必要があります。 そのパーティションは、表の最後のパーティションであってはなりません。
- ENDING AT (constant、MAXVALUE、または MINVALUE...)
- END AT 節は、最も古いデータを保持する既存のパーティションに対して、新しいハイキーリミットを指定します。
ここで言う最高とは、列のソート・シーケンスの中で最高であることを意味します。 昇順 (ASC) と して定義された列においては、最高と最低がその言葉通りの意味を持ちます。 降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。
ENDING AT の後に少なくとも1つの値を指定してください。 キーの中の列と同じ数だけ値を使うことができます。 すべての値を連結したものが、対応するパーティション内のキーの最高値となります。 それぞれの最高キー値 (限界キーとも呼ばれる) の長さは、パーティション・キーの長さと同じです。- 定数
- 定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。 ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。 列が昇順の場合、埋め込み文字は X'FF' です。 列が降順の場合、埋め込み文字は X'00' です。 10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。 16 進数ストリング定数 (GX) は指定できません。
- MAXVALUE
- パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。 パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。 MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
- MINVALUE
- パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。 パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
このキー値は以下の規則に制約されます。- 最初の値がキーの 1 列目に対応し、2 番目の値が 2 列目に 対応するといった形で、以下同様に続いていきます。 キーにある列数より少ない数の値を使用すると、列が昇順か降順かに応じて、省略した列に対して最高値または最低値を使用した場合と同じ効果があります。
- どのパーティションにおいても、キーの最高値は、次のパーティション内のキーの 最高値より低位でなければなりません。
- 最終パーティションに対して指定した値が適用されます。 最終パーティションに対して指定される値は、表に置くことができるキーの最高値です。 限界が以前に適用されなかった場合、追加したパーティションに対して指定した値より大きな既存キー値は、REORG の実行時に DISCARD データ・セットに置かれます。
- キーに ROWID 列または ROWID データ・タイプに基づく特殊タイプの列が含まれている場合は、対応する ROWID 列に対して指定された定数の先頭 17 バイトが使用されます。
- 表スペースのパーティション数とそれに対応する限界キー・サイズの組み合わせは、パーティション数 * (106 + 限界キー・サイズのバイト数) (<65394) を超えてはいけません。
- すべての値の連結が 255 バイトを超える場合は、先頭 255 バイトのみが使用されます。
- INCLUSIVE
- 範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
- RESET
- 最初の論理パーティションの既存データを削除するように指定します。 また、関連付けられた物理および論理索引パーティションからのキー項目も削除されます。
昇順の限界値をもつパーティション表では、ALTER TABLE ROTATE PARTITION FIRST TO LAST は、最低の高いキー限界をもつパーティションをドロップし、指定した高いキー限界をもつ新規パーティションを追加するように論理上は動作します。 このパーティションに対する新しいキー限界は、表にある他のパーティションよりも高くする必要があります。 限界キーが降順の場合、この循環は、最高の限界値をもつパーティションが最低の限界値をもつパーティションになるように動作します。
パーティションに以下の属性のいずれかが含まれている場合、 Db2 はパーティション内の各データ行を個別に削除します- REFERENTIAL INTEGRITY PARENT 関係
- DATA CAPTURE ロギングが有効
- 行削除トリガー
- 妥当性検査プロシージャー
表が範囲ごとの表スペースにあり、前の属性のいずれも持たない場合、Db2は大量削除処理を使用し、個別のデータ行は変更またはログに記録されません。
ROTATE PARTITION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限事項、復旧ステータスへの影響、その他の考慮事項については、 ポイントインタイムリカバリを参照してください。
ドロップ組織
- DROP ORGANIZATION
- 表のデータ編成定義をドロップすることを指定します。 DROP ORGANIZATIONはハッシュ・オーガナイズされたテーブルにのみ指定しなければならない。
ADD ORGANIZE BY HASHまたはALTER ORGANIZATION
詳細は、 ハッシュ組織を参照してください。
ADD VERSIONING
- ADD VERSIONING
- これを指定すると、表はシステム期間テンポラル表になります。
表は、システム期間テンポラル表、履歴表、アーカイブ対応表、またはアーカイブ表として既に定義されていてはなりません。
表に SYSTEM_TIME 期間と transaction-start-ID 列が定義されている必要があります。 transaction-start-ID 列のデータ・タイプ、長さ、精度、および位取りは、表の SYSTEM_TIME 期間の row-begin 列および row-end 列と同じように定義する必要があります。 表を、表スペースにおいて唯一の表にする必要があります。 この表は、マテリアライズ照会表、不完全な表、補助表、クローン関係に組み込まれている表、XML 列用に暗黙的に作成された表、またはセキュリティー・ラベル列を含む表であってはなりません。 ADD VERSIONING は、ALTER TABLE ステートメントの他の文節に指定してはなりません。
特権セットには、関連した履歴表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。
表内の行の履歴バージョンは、Db2によって保持されます。 システム期間テンポラル表には、表に行が挿入された時点、およびこの行が更新または削除された時点を示す追加情報が含まれています。 表の履歴行を格納するために、関連付けられた履歴表が使用されます。 システム期間テンポラル表内のデータが更新されると、その行の前のバージョンは関連する履歴表に保持されます。 システム期間テンポラル表内のデータが削除されると、その行の最終バージョンが履歴表に挿入されます。
この表に対する参照には、戻すデータのバージョンを指示する期間文節を含めることができます。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
- USE HISTORY TABLE 履歴テーブル名
- システム期間テンポラル表の履歴行を保持する履歴表を指定します。
履歴表にデータが含まれている場合、データが履歴行を正確に表すようにしてください。 データが履歴行の結果を正確に表さない場合、テンポラル照会が予期しない結果になる可能性があります。
history-table-name は現行サーバーに存在する表を示すものでなければならず、以下のいずれかの表を示すものであってはなりません。
- システム期間テンポラル表。 前のステートメントによってシステム期間テンポラル表として表が定義されているか、現在のステートメントが表をシステム期間テンポラル表として定義しています。
- 既存の履歴表。
- アーカイブ対応表。
- アーカイブ表。
- 宣言済みグローバル一時表。
- 作成されたグローバル一時表。
- マテリアライズ照会表。
- ビュー。
- 補助表。
- XML 列用に暗黙的に作成された表。
- クローン関係に組み込まれている表。
履歴表を、表スペースにおいて唯一の表にする必要があります。制約事項:- 履歴表には以下の列のいずれも含めることはできません。
- ID 列
- 行変更タイム・スタンプ列
- 行開始列
- 行終了列
- トランザクション開始 ID 列
- 生成式列
- 列マスク
- セキュリティー・ラベル列。
- 履歴表に期間を含めることはできません。
- 履歴表に不完全な表定義があってはなりません。
- 履歴表に行の許可を定義してはなりません。
システム期間テンポラル表および指定した履歴表のコード化スキームおよび CCSID は、同じでなければなりません。
システム期間テンポラル表および指定した履歴表の列は、同じ数で同じ順序でなければなりません。 2 つの表の対応する列の以下の属性は同じでなければなりません。
- 名前
- データ型
- 長さ (インライン LOB 長は除く)、精度、および位取り
- サブタイプおよび CCSID
- NULL 属性
- 非表示属性
- フィールド・プロシージャー
システム期間テンポラル表の列を ROWID GENERATED ALWAYS として定義する場合、対応する履歴列は ROWID GENERATED ALWAYS として定義する必要があります。
システム期間テンポラル表の列を GENERATED ALWAYS FOR EACH ROW ON UPDATE OF ROW CHANGE TIMESTAMP または GENERATED AS IDENTITY として定義する場合、対応する履歴表の列を GENERATED 属性で定義することはできません。
- ON DELETE ADD EXTRA ROW
- 行がシステム期間テンポラル表から削除されたときに追加行が関連する履歴表に挿入されるように指定します。
システム期間時系列テーブルに対して期間指定を含むクエリを実行した場合、これらの追加の履歴行は返されません。
履歴テーブルの追加行の列の内容は、以下の通り決定される:- 新規の値が非 deterministic 生成式列に対応する各列に対して生成されます。
- 行開始列に対応する列は、行終了列に対応する列と同じ値に設定されます。
- その他の列は、削除の履歴表に挿入される行と同じ値に設定されます。
ON DELETE ADD EXTRA ROW 節は、システム期間テンポラル表に非 deterministic 生成式列が含まれる場合に使用することを想定しています。
生成された式列は追加行に含まれ、履歴テーブルにおけるその追加行を生成した削除操作に関する情報を保持する。
詳細は、「一時テーブルとデータのバージョン管理 」を参照してください。
DROP VERSIONING
- DROP VERSIONING
- これを指定すると、表はシステム期間テンポラル表ではなくなります。 table-name は、システム期間テンポラル表を示していなければなりません。 表の履歴データは、記録も保守もされなくなります。 表 table-name の列およびデータの定義は変更されませんが、表はシステム期間テンポラル表として処理されなくなります。 期間 SYSTEM_TIME は保持されます。 システム期間テンポラル表と履歴表との間の関係は解除されます。 履歴表はドロップされず、2 つの表の間の関係が解除されるだけです。 これ以降、この表を参照する照会では、表の SYSTEM_TIME 期間指定を指定することはできません。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
SYSTEM_TIME 期間に依存するビュー、マテリアライズ照会表定義、または SQL 表関数がある場合、バージョン管理はドロップできません。
DROP VERSIONING は、ALTER TABLE ステートメントの他の文節で指定してはなりません。
特権セットには、関連した履歴表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。
ADD MATERIALIZED QUERY
- 実体化されたクエリを追加する materialized-query-definition
- 基本表をマテリアライズ照会表に変更します。 通常の表をマテリアライズ照会表にするための定義を提供します。 table-name によって指定される表と、全選択の結果列には、次の特性があってはなりません。
- 既にマテリアライズ照会表として定義されている
- 主キー、ユニーク制約 (ユニーク索引)、参照制約 (外部キー)、チェック制約、またはトリガーが定義されている
- 他のマテリアライズ照会表の定義で参照されていてはならない。
- fullselect の中で直接または間接的に参照されている
- 不完全な状態にある
- システム期間テンポラル表、または履歴である
- 行アクセス制御または列アクセス制御が活動化された基本表である
- 行の許可または列マスクが定義されている基本表である
- アーカイブ対応表またはアーカイブ表である
全選択に期間指定が含まれていてはなりません。
全選択の FROM 文節に指定されたオブジェクトを、長さ 0 の列を持つビューにすることはできません。
- フルセレクト
- 表の基礎となる照会を定義します。 既存の表の列は、次の特性を満たしている必要があります。
- 列の数が同じである
- 列定義が厳密に同じである
- 同じ列名が同じ順序で並んでいる
fullselect は、行アクセス制御または列アクセス制御が活動化されている基本表、または行の許可または列マスクが定義されている基本表を、直接的であっても間接的であっても参照してはなりません。
フルセレクトには、作成済みのグローバル一時テーブル、宣言済みのグローバル一時テーブル、アクセラレータ専用テーブル、ディレクトリテーブル、または他のマテリアライズドクエリテーブルへの参照を含めることはできません。
fullselect の最外部の SELECT 文節によって列が配列にならないようにする必要があります。
FL 500 フルセレクトの最外層のSELECTリストには、EBCDIC列として定義された結果列とUnicode列として定義された結果列の両方を含めることができます。 この場合、マテリアライズ照会表は、1 つ以上の Unicode 列がある EBCDIC 表です。
全選択を指定する場合、変更対象の表の所有者は、全選択の中で参照される表またはビューに対して SELECT 特権を持っている必要があります。 SELECT 特権を持っているとは、所有者が次のうち少なくとも 1 つの許可を持っていることを意味します。
- 全選択の中で参照される表またはビューの所有権
- 全選択の中で参照される表またはビューに対する SELECT 特権
- SYSADM 権限
- 全選択の表を格納しているデータベースに対する DBADM 権限
全選択で参照されている他のオブジェクトにアクセスするのに追加の特権が必要になる可能性があります。
表の所有者が SELECT 特権を持っていない場合は、全選択の表を格納しているデータベースに対して、次の許可 ID が SYSADM 権限または DBADM 権限を持っている必要があります。
- 組み込みステートメントの場合は、プランまたはパッケージ所有者の許可 ID
- 動的に準備されるステートメントの場合は、プロセスの SQL 許可 ID
マテリアライズド・クエリ・テーブルで fullselect を指定する方法の詳細については、 CREATE TABLE文の fullselectの定義を参照してください。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
- リフレッシュ可能なテーブルオプション
- 通常の表をマテリアライズ照会表に変更するためのマテリアライズ照会表オプションを指定します。 ORDER BY 文節は許可されますが、REFRESH によってのみ使用されます。 ORDER BY 文節を使用すると、マテリアライズ照会表にあるデータを参照する場合の局所性が向上する可能性があります。
- DATA INITIALLY DEFERRED
- 表のデータをこの ALTER TABLE ステートメントの中で検証しないように指定します。 REFRESH TABLE ステートメントを使用して、マテリアライズ照会表のデータが、表の基礎になる照会の結果と同じであることを保証できます。
- REFRESH DEFERRED
- REFRESH TABLE ステートメントを使用して、表のデータをいつでもリフレッシュできるように指定します。 照会結果が表のデータに反映される時期は、REFRESH TABLE ステートメントが処理される時点でスナップショットとして、またはユーザー管理のマテリアライズ照会表をユーザーが更新したときに限られます。
- MAINTAINED BY SYSTEM または MAINTAINED BY USER
- マテリアライズ照会表のデータを保守する方法を指定します。
- MAINTAINED BY SYSTEM
- マテリアライズ照会表 table-name のデータをシステムが保守するように指定します。 REFRESH TABLE ステートメントのみをこの表に対して実行できます。
- MAINTAINED BY USER
- マテリアライズ照会表 table-name のデータをユーザーが保守するように指定します。このユーザーは、LOAD ユーティリティーまたは SQL データ変更ステートメントおよび REFRESH TABLE の各ステートメントを表に対して使用できます。
- ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
- 最適化のためにこのマテリアライズ照会表を使用できることを指定します。
- ENABLE QUERY OPTIMIZATION
- 照会を最適化するためにマテリアライズ照会表を使用できることを指定します。 指定された全選択が照会の最適化に関する制約事項を満たさない場合は、エラーが発生します。 問い合わせ最適化を満たすための詳細なルールについては、CREATE TABLE 文の materialized-query-definition を参照してください。
- DISABLE QUERY OPTIMIZATION
- 照会を最適化するためにマテリアライズ照会表を使用できないことを指定します。 それでもその表を直接照会することはできます。
ALTER MATERIALIZED QUERY
- ALTER MATERIALIZED QUERY 実体化クエリテーブル変更
- マテリアライズ照会表の属性を変更します。 table-name
はマテリアライズ照会表を示している必要があります。
- SET リフレッシュ可能テーブル変更
- 表を保守する方法、または表を照会の最適化に使用できるかどうかを変更します。
- MAINTAINED BY SYSTEM
- マテリアライズ照会表 table-name のデータをシステムが保守するように指定します。
- MAINTAINED BY USER
- マテリアライズ照会表 table-name のデータをユーザーが保守するように指定します。
- ENABLE QUERY OPTIMIZATION
- マテリアライズ照会表 table-name を照会の最適化に使用できることを指定します。 マテリアライズ照会表に対して指定された全選択が、照会の自動最適化に関する制約事項を満たさない場合は、エラーが発生します。 問い合わせの最適化を満たすための詳細なルールについては、CREATE TABLE 文を参照してください。
- DISABLE QUERY OPTIMIZATION
- マテリアライズ照会表 table-name を照会の最適化に使用できないことを指定します。 それでもその表を直接照会することはできます。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
DROP MATERIALIZED QUERY
- DROP MATERIALIZED QUERY
- マテリアライズ照会表を変更して、その表がマテリアライズ照会表と見なされないようにします。 table-name によって指定される表は、マテリアライズ照会表として定義されている必要があります。 その名前の列とデータの定義は変更されませんが、表は照会の最適化に使用できなくなり、REFRESH TABLE ステートメントにこの表を指定しても無効になります。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
DATA CAPTURE
- DATA CAPTURE
- 表に対する以下のアクションのロギングに、データ複製処理をサポートする追加情報が含まれているかどうかを指定します。
- SQL データ変更操作
- 列追加 (ADD COLUMN 文節を使用)
- 列変更 (ALTER COLUMN 文節を使用)
詳細は、「変更データを取得するためのテーブルの変更 」を参照してください。
- NONE
- 追加情報をログに記録しません。
- CHANGES
- SQL の更新に関する追加データをログに書き込みます。 LOB または XMLで表される値に関する情報は利用できません。 NOT LOGGED を指定したテーブルスペースに存在するテーブルには、DATA CAPTURE CHANGES を指定しないでください。
DATA CAPTURE CHANGES 文節は、行アクセス制御または列アクセス制御がアクティブな表に対して指定できます。 ただし、アクセス制御は、ログに書き込まれるデータは保護しません。
カタログテーブルへの更新の追加データの記録に関する詳細は、ALTER SEQUENCEステートメントを参照してください。
VOLATILE
- VOLATILE または NOT VOLATILE
- Db2が表へのアクセスを選択する方法を指定します。
- VOLATILE
- Db2が SQL 操作で可能な限り、表に索引アクセスを使用することを指定します。 ただし、VOLATILE の使用時には、リスト・プリフェッチおよび他のいくつかの最適化手法が使用できなくなる可能性があることに注意してください。
VOLATILE の使用が望ましい 1 つの例は、サイズが大きく変わる可能性がある表の場合です。 表が空か数行しかないときに統計を取ると、表の行数が多くなったときにその統計が適さなくなる可能性があります。
VOLATILE の使用が望ましいもう 1 つの例は、表の主キーによる定義に従って行のグループを格納する表の場合です。 最終列を除き、このような表の主キーの列はすべて、それぞれの行が所属するグループを示します。 主キーの最終列は、行をグループから読み取る順序を示すシーケンス番号です。 VOLATILE を使用すると、それぞれの操作ごとに行が同じ順序でアクセスされるので、各グループ内の行に対する操作の並行性が最大になります。 この使用法では、1 次索引は表に定義された唯一の索引でなければならず、行がロックされる順序を確保するために、リスト・プリフェッチを使用できなくなります。
- NOT VOLATILE
- Db2が、現行統計に基づいて、表への SQL アクセスを行うことを指定します。
- CARDINALITY
- 現在は有効ではないが、Db2ファミリーの互換性のために用意されているオプションのキーワードです。
ADD CLONE
- ADD CLONE クローンテーブル名
- クローン表 (clone-table-name で指定) が、変更対象の表に対して作成されることを指定します。 名前 (暗黙または明示の修飾子を含む) は、現行サーバーに存在する表、ビュー、別名、またはシノニムを指定してはなりません。 この名前は、SYSPENDINGOBJECTS カタログ表に存在する表を示すものであってはなりません。 このクローン表は、基本表と同じ表スペース内に作成され、基本表と同じ構造を持っています。 これには、列名、データ・タイプ、ヌル属性、チェック制約、索引が含まれます (ただし、それらに限定されません)。 指定された基本表のクローンを作成するのに ADD CLONE を使用する場合、その基本表は以下の規則に従う必要があります。
- Db2によって管理されているユニバーサル表スペースに再送信します。
- 表スペースまたはその従属オブジェクト (LOB、XML、または索引) が DEFINE NO 文節指定で作成されている場合、すべてのデータ・セットは作成済みにする必要がある
- 表スペース内の唯一の表である
- クローン表を指定して定義されていない
- ハッシュ編成を使用するように定義されていない
- どの参照制約にも関係していない
- どの AFTER トリガーとも一緒に定義されていない
- マテリアライズ照会表ではない
- どのような保留状態の変更もない
複数の表スペース・バージョンまたは索引バージョンを使用してはなりません。 使用中のバージョンを削除する方法については、 「使用中のテーブルスペースバージョンの削除 」および「 インデックスバージョン番号のリサイクル」 を参照してください。
- 作成されたグローバル一時表、または宣言されたグローバル一時表でない
- システム期間テンポラル表、または履歴表でない
- アーカイブ対応表でもアーカイブ表でもない
- 基本表で相対番号付けを使用する場合、クローン表に変更されていない
基本表とクローン表は、アクセス制御に関しては関連がないと見なされます。 行アクセス制御または列アクセス制御は、基本表またはクローン表、あるいはこの両方とは無関係に活動化できます。
FL 500 ベーステーブルとクローンテーブルの所有権は、それぞれ独立して譲渡できます。
DROP CLONE
- DROP CLONE
- 指定の基本表に関連したクローン表をドロップすることを指定します。 table-name は、現行サーバーに存在する基本表を指定する必要があり、その表はクローン表を定義しておく必要があります。
クローン表がドロップされると、そのクローン表に定義された行の許可または列マスクもドロップされます。 クローン表が行の許可または列マスクの定義で参照されている場合、ALTER ステートメントからエラーが戻されます。
ドロップの制限
- ADD RESTRICT ON DROP
- 表およびデータベース、ならびに表が入った表スペースのドロップを制限します。
- DROP RESTRICT ON DROP
- 表およびデータベース、ならびに表が入った表スペースの除去に関する制限を 除去します。
行アクセス制御
- ACTIVATE ROW ACCESS CONTROL
- 表の行アクセス制御を活動化する必要があることを指定します。 表が別名またはシノニムである場合は、基本表の行アクセス制御が活動化されます。表は、以下のいずれかの表であってはなりません。
- 作成済みの一時表
- マテリアライズ照会表の定義で直接的または間接的に参照される表
- セキュリティー・ラベル列が含まれている表
- システム期間テンポラル表
- 履歴表
- アーカイブ可能な表
- アーカイブ表
別の Db2 for z/OS® サブシステムへのフェデレーテッドアクセスが許可されたテーブル IBM® Db2 Analytics Accelerator
表のトリガーが存在する場合、そのトリガーは SECURED 文節で定義されている必要があります。
この表は、以下の条件に当てはまる場合は、ビューの定義で参照されていてはなりません。
- ビューが WITH CHECK OPTION 文節で定義されている
- ビューの INSTEAD OF トリガーが存在し、このトリガーが SECURED 文節で定義されていない
使用可能に設定されていて、かつ行の許可の定義で指定された許可 ID またはロールのアクセス権限を提供する別の行の許可がない限り、表のデフォルトの行の許可が暗黙的に作成され、表のどの行にもアクセスできなくなります。 このような行の許可が存在して使用可能に設定される前に照会で表を参照すると、表にデータがないことを示す警告が戻されます。
期間指定がある表にはデフォルトの行の許可を定義できないため、期間を表に定義する場合は、ACTIVATE ROW ACCESS CONTROL を指定しないでください。
表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合は、デフォルトの行の許可を含む、表で使用できるように設定されたすべての行の許可が、表にアクセスできる行セットを制御するために適用されます。 以前に行の許可を再生成しようとして失敗したために、使用可能ないずれかの行の許可が無効であると、行アクセス制御は活動化できません。
ACTIVATE ROW ACCESS CONTROL は、表の行アクセス制御が既に活動化されている場合は、無視されます。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
- DEACTIVATE ROW ACCESS CONTROL
- 表の行アクセス制御を非活動化することを指定します。 表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合、表で使用可能な既存の行の許可は、表にアクセスできる行セットを制御するために適用されることはありません。
DEACTIVATE ROW ACCESS CONTROL は、行アクセス制御をこの表に対して活動化しないよう既に定義されている場合は、無視されます。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
列アクセス制御
- ACTIVATE COLUMN ACCESS CONTROL
- 表の列アクセス制御を活動化する必要があることを指定します。 表が別名またはシノニムである場合は、基本表の列アクセス制御が活動化されます。
表は、以下のいずれかの表であってはなりません。
- 作成済みの一時表
- マテリアライズ照会表の定義で直接的または間接的に参照される表
- システム期間テンポラル表
- 履歴表
- アーカイブ可能な表
- アーカイブ表
別の Db2 for z/OS サブシステムへのフェデレーテッドアクセスが許可されたテーブル IBM Db2 Analytics Accelerator
表のトリガーが存在する場合、そのトリガーは SECURED 文節で定義されている必要があります。
この表は、以下の条件に当てはまる場合は、ビューの定義で参照されていてはなりません。
- ビューが WITH CHECK OPTION 文節で定義されている
- ビューの INSTEAD OF トリガーが存在し、このトリガーが SECURED 文節で定義されていない
列アクセス制御が活動化されている場合、表に対するアクセスは制限されません。 ただし、この表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合、表で使用可能なすべての列マスクが、最終結果表で参照される列に対して戻される値をマスクしたり、SQL データ変更ステートメントで使用される新しい値を判別したりするために適用されます。 以前に列マスクを再生成しようとして失敗したために、使用可能ないずれかの列マスクが無効になっていると、列アクセス制御を活動化できません。
ACTIVATE COLUMN ACCESS CONTROL は、表の列アクセス制御が既に活動化されている場合は、無視されます。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
- DEACTIVATE COLUMN ACCESS CONTROL
- 表の列アクセス制御を非活動化することを指定します。 この表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合、表で使用可能なすべての既存の列マスクは、最終結果表で参照される列に対して戻される値を制御したり、新しい値が SQL データ変更ステートメントで使用できるかどうかを判別したりするために適用されることはありません。
DEACTIVATE COLUMN ACCESS CONTROL は、列アクセス制御をこの表に対して活動化しないよう既に定義されている場合は、無視されます。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
APPEND
- APPEND NO または APPEND YES
- 表に対する追加処理を使用するかどうかを指定します。 APPEND 文節は、作業ファイル表スペースにある表に対して指定してはなりません。
基本表が範囲内パーティション表スペースにある場合、LOB 表の APPEND オプションは、パーティションごとに異なる場合があります (各パーティションの LOB 表スペースおよび関連オブジェクトが明示的または暗黙的に作成されているかどうかによって異なります)。 増加対応パーティション表スペースにある基本表の場合は、LOB 表の APPEND 属性が、各パーティションによって継承されます。
- NO
- 表に対する追加処理を使用しないことを指定します。 挿入操作および LOAD 操作の場合、Db2は、行のクラスター・キー列の値に関して、データ行を適切にクラスター化された方法で配置しようとします。
- YES
- 挿入操作および LOAD 操作時にクラスター化に関係なく表にデータ行を配置することを指定します。
AUDIT
- AUDIT
- 表の監査属性を変更します。 監査トレースクラスに関する情報は、「監査トレース」 を参照してください。
- NONE
- 表がアクセスされたときに監査を行わないように指定します。
- CHANGES
- 最初の挿入、更新、または削除操作の間に表がアクセスされたときに、監査を行うように指定します。 ただし、監査が行われるのは、適切な監査トレース・クラスがアクティブな場合だけです。
- ALL
- ユーティリティーまたはアプリケーション・プロセスによって実行される任意の種類の最初の操作中に表がアクセスさ れたときに、監査を行うように指定します。 ただし、監査が行われるのは、適切な監査トレース・クラスがアクティブであり、 COPY、RECOVER、REPAIR、または任意の独立型ユーティリティーを使った アクセスでない場合だけです。
適切な監査トレース・クラスがアクティブな場合に、以下の状況に該当するときは、ALTER TABLE ステートメントの試行の成功および失敗が監査されます。
- AUDIT 属性が変更されます。 NONE、 CHANGES、または ALL 監査対象または非監査対象のテーブルで
- AUDIT CHANGES または AUDIT ALL 有効です。
VALIDPROC
- VALIDPROC
- 表に関する検証プロシージャーを指定するか、あるいは
既存の検証プロシージャーの実行を禁止します。
- program-name
- 表についての新しい検証出口ルーチンとして、program-name を
指定します。
検証プロシージャーは、この表のどの行でもデータ変更操作を禁止することができます。 これらの操作が行われる前に、検証プロシージャー に行が渡されます。 この表内のどの LOB 列または XML 列により表される値も妥当性検査プロシージャーには受け渡されません。 挿入操作または更新操作時に、表にセキュリティー・ラベル列があって、ユーザーが write-down privilege (ライトダウン特権) を持っていない場合、ユーザーのセキュリティー・ラベル値が列の値として検証ルーチンに渡されます。 プロシージャーは行を検査した後で、操作を進めるべきかどうか を示す値を戻します。 この典型的な使い道は、さまざまな列に現れる値に制約を課すことです。
1 つの表がある一時点で持てる検証プロシージャーは、1 つだけです。 新しいプロシージャーを指定すると、既存のプロシージャーは使われなくなります。 新しいプロシージャーが、表の既存行の検証に使用されることはありません。 これは、ALTER TABLE ステートメントの実行後にロード、挿入、 更新、または削除された行を検証するためだけに使われます。
詳細は、「バリデーションルーチン」 を参照してください。
- NULL
- 表に関する検証ルーチンの使用を中止します。
アーカイブを有効にする
- ENABLE ARCHIVE
- 表がアーカイブ対応表になるように指定します。
表は以下の基準を満たしている必要があります。
- 表は、アーカイブ対応表やアーカイブ表として既に定義されていてはなりません。
- 表に期間を含めることはできません。
- 表を、表スペースにおいて唯一の表にする必要があります。
- 表には列マスクも行の許可も定義されていてはなりません。
- 表は、以下のいずれかの表であってはなりません。
- マテリアライズ照会表
- 不完全な表
- 補助表
- クローン関係に組み込まれている表
- XML 列のために暗黙的に作成された表
- セキュリティー・ラベル列が含まれている表
- システム期間テンポラル表
- 履歴表
ENABLE ARCHIVE は、ALTER TABLE ステートメントの他の文節に指定してはなりません。
特権セットには、関連したアーカイブ表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。
アーカイブ対応表の場合、Db2は、アーカイブされたバージョンの行を保存します。 アーカイブ対応表内のデータが削除され、SYSIBMADM.MOVE_TO_ARCHIVE 組み込みグローバル変数が Y に設定されている場合、行の最終バージョンがアーカイブ表に挿入されます。
SYSIBMADM.GET_ARCHIVE 組み込みグローバル変数および ARCHIVESENSITIVE バインド・オプションは、アーカイブ対応表が table-reference で参照されている場合に、関連するアーカイブ表の行を含めるかどうかを決定します。
- USE アーカイブテーブル名
- アーカイブ対応表のアーカイブされた行を保持するアーカイブ表を指定します。
archive-table-name は、現行サーバーに存在する表を示すものでなければなりません。 表は以下の基準を満たしている必要があります。
- 表を、表スペースにおいて唯一の表にする必要があります。
- 表に不完全な表定義があってはなりません。
- 表を、既存の参照制約内で親としても子としても定義することはできません。
- 表に期間を含めることはできません。
- 表に行の許可も列マスクも含めることはできません。
- 表を以下のいずれかの表にすることはできません。
- カタログ表。
- アーカイブ対応表。 前のステートメントによってアーカイブ対応表として表が定義されているか、現在のステートメントが表をアーカイブ対応表として定義しています。
- 既存のアーカイブ表。
- システム期間テンポラル表。
- 履歴表。
- 宣言済みグローバル一時表。
- 作成されたグローバル一時表。
- マテリアライズ照会表。
- ビュー。
- 補助表。
- XML 列用に暗黙的に作成された表。
- クローン表。
- クローンが定義されている表。
- 表には以下の列のいずれも含めることはできません。
- ID 列
- 行開始列
- 行終了列
- トランザクション開始 ID 列
- 生成式列
- セキュリティー・ラベル列
特権セットには、関連したアーカイブ表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。
アーカイブ対応表と関連するアーカイブ表は、含まれる列の数と順序が同じでなければなりません。 2 つの表の対応する列の以下の属性は同じでなければなりません。
- 名前
- データ・タイプ
- 長さ (基本表のインライン LOB の長さや XML の長さを除く)、精度、および位取り
- 文字ストリング列の FOR BIT、SBCS、または MIXED DATA 属性
- NULL 属性
- 非表示属性
- CCSID
- フィールド・プロシージャー
アーカイブ対応表の列を ROWID として定義する場合は、アーカイブ表の対応する列も GENERATED ALWAYS 属性を使用して ROWID として定義する必要があります。
アーカイブ対応表の列を行変更タイム・スタンプとして定義する場合は、アーカイブ表の対応する列も GENERATED ALWAYS 属性を使用して行変更タイム・スタンプとして定義する必要があります。
アーカイブを無効にする
- DISABLE ARCHIVE
- 表がアーカイブ対応表でなくなるように指定します。
table-name はアーカイブ対応表を示すものでなければなりません。 表 table-name の列およびデータの定義は変更されませんが、表はアーカイブ対応表として処理されなくなります。 アーカイブ対応表と関連するアーカイブ表との関係は解除されます。 アーカイブ表はドロップされません。 ただし、アーカイブ表とアーカイブ対応表との関係を解除すると、アーカイブ対応表の動作が次のように変わります。
- その表を参照する後続の照会は、SYSIBMADM.GET_ARCHIVE 組み込みグローバル変数または ARCHIVESENSITIVE バインド・オプションの設定にかかわらず、アーカイブ表の行を考慮しません。
- 削除された行は、SYSIBMADM.MOVE_TO_ARCHIVE 組み込みグローバル変数の設定にかかわらず、アーカイブ表に移動されません。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
DISABLE ARCHIVE を、ALTER TABLE ステートメントの他の文節で指定してはなりません。
特権セットには、関連したアーカイブ表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。
注釈 ALTER TABLE
- 条項の処理順序
- 複数の文節がある場合、文節は次の順序で処理されます。
- VALIDPROC
- AUDIT
- DATA CAPTURE
- ROTATE
- VOLATILE 文節
- APPEND 文節
- DROP 文節
- ALTER 文節
- RENAME 文節
- ADD 文節
これらそれぞれの段階の中では、ユーザーが文節を指定した順序が、これらの文節が実行される順序です。
- 列のデータ・タイプ、長さ、精度、または位取りを変更する
- 列のデータ型、長さ、精度、または小数点以下の桁数を変更する場合は、以下の情報を考慮してください
- 文字データの変更
列を CHAR から VARCHAR に変換する場合は、通常の割り当て規則が適用されます。つまり、末尾ブランクは切り捨てられずに保持されます。 末尾ブランクのない可変長文字ストリングが必要な場合は、データ・タイプを VARCHAR に変更した後、列のデータに対して STRIP 関数を使用してください。
CHAR FOR BIT DATA 列を BINARY データ・タイプに変換する場合、以下の内容が適用されます。
- 表の中の既存のスペース文字は 16 進数のゼロ (X'00') には変更されません。
- その列の現行の長さ属性よりも新規の長さ属性が大きい場合、表の中の値は 16 進数のゼロ (X'00') で埋め込まれます。
CHAR FOR BIT DATA 列または VARCHAR FOR BIT DATA 列が BINARY データ・タイプまたは VARBINARY データ・タイプに変換されると、既存のデフォルト値はバイナリー・ストリングとしてキャストされます。 結果のバイナリー・ストリングは、少なくとも元のサイズの 2 倍になります。 結果のバイナリー・ストリングの長さが 1536 UTF-8 バイトを超える場合、変更は失敗します。
- 固定長から可変長への変更または可変長列の増加
- 固定長から可変長に変更したり、可変長の列の長さを変更したりする場合は、同じ作業単位で ALTER TABLE ステートメントを処理し、または ALTER TABLE ステートメントの間で再編成を行い、個々の値の長さと埋め込みの異常を回避します。
- DECIMAL(19,0) を BIGINT に変更します。
DB2® 9の前のリリースDb2は、BIGINT データを使用するアプリケーションに DECIMAL(19,0) データ・タイプを使用することが推奨されます。 パフォーマンス上の理由により、DECIMAL(19,0) 列を BIGINT に変更するのが最善です。 注意すべきは、BIGINT データを処理するアプリケーションに使用する DECIMAL(19,0) 列に対してのみ、DECIMAL(19,0) から BIGINT へ変換するということです (これにより、その列内のデータが BIGINT の範囲内にあります)。
DECIMAL(19,0) から BIGINT への変換時、DECIMAL(19,0) 列内のすべての値は、その変換前に BIGINT の範囲内にあることを確認する必要があります。 以下の照会または類似の照会を実行して、どの行 (あるとしたら) に BIGINT の範囲から外れた値が含まれているかを判別できます。SELECT * FROM table_name WHERE dec19_0_column > 9223372036854775807 OR dec19_0_column < -9223372036854775808;- パーティション・キー内の列の変更
数値データ・タイプを持ったパーティション・キー列がもっと大きな数値データ・タイプに変更され、その列のオリジナルの数値データ・タイプに対する限界キー値 が X'FF の場合、その列の新規数値データ・タイプに対する限界キー値は左側を X'FF で埋められます。 例えば、ある列が SMALLINT から INTEGER に変換され、この SMALLINT 列の限界キー値が 32767 (この値は 2 バイトの X'FF を表す) の場合、INTEGER 列の限界キーは 2147483647 (この値は 4 バイトの X'FF を表す) です。
文字データ・タイプのパーティション・キー列がより長い文字データ・タイプに変更され、その列の元の文字データ・タイプの限界キー値 (列が NULL 可能な場合、最初の NULL バイトは除く) が、すべて X'FF でもすべて 00 でもない場合、その列の新しい文字データ・タイプの限界キー値は、表のエンコード・スキームのブランクで右側が埋められます。 例えば、列が CHAR(1) から VARCHAR(2) に変換され、CHAR(1) 列の限界キー値が 'A' (X'C1) の場合、VARCHAR(2) 列の限界キー値は、'A ' (表のエンコード・スキームが EBCDIC の場合は X'C140、表のエンコード・スキームが UNICODE または ASCII の場合は X'C120) です。
文字データ・タイプのパーティション・キー列がより長い文字データ・タイプに変更され、その列の元の文字データ・タイプの限界キー値 (列が NULL 可能な場合、最初の NULL バイトは除く) がすべて X'FF の場合、その列の新しい文字データ・タイプの限界キー値は右側が X'FF で埋められ、変更される表を含む表スペースは REORG ペンディング (REORP) 状況のまま残ります。
文字データ・タイプのパーティション・キー列がより長い文字データ・タイプに変更され、その列の元の文字データ・タイプの限界キー値 (列が NULL 可能な場合、最初の NULL バイトは除く) がすべて X'00' の場合、その列の新しい文字データ・タイプの限界キー値は右側が X'00' で埋められ、変更される表を含む表スペースは REORG ペンディング (REORP) 状況のまま残ります。
- 変更された列の統計
- 変更されたすべての列の新しい COLUMN 統計を収集してください。 COLCARDF 値が有効な場合でも、HIGH2KEY と LOW2KEY の値が無効であれば、この列に対するすべての SYSCOLSTATS カタログ・エントリーが削除されます。 また、この列を含むどの頻度統計またはヒストグラム統計も再度収集する必要があります。
- XML 列の変更に関する考慮事項
- altered-data-type が XML である場合、変更される列の古いデータ・タイプも XML である必要があります。
- 古いデータ・タイプが XML タイプ修飾子を持っておらず、新規データ・タイプは持っている場合は、タイプ修飾子で指定されている XML スキーマに従ってその XML 列のすべての値が有効であることを確認する必要があります。 変更されている列の表スペースは、CHECK ペンディング状況のままです。
- 古いデータ・タイプが XML タイプ修飾子を持っており、新規データ・タイプはタイプ修飾子を持っていない場合、既存の値を再検証する必要はありません。 表スペースの状態は変更されません。
古い XML タイプ修飾子で指定されている XML スキーマが新規 XML タイプ修飾子で指定されている XML スキーマのサブセットである場合、既存の値を再検証する必要はありません。 XML 表スペースの状態は変更されません。
- 古い XML タイプ修飾子で指定されている XML スキーマが新規 XML タイプ修飾子で指定されている XML スキーマのサブセットでない場合、変更されている列の XML 表スペースは CHECK ペンディング状況のままになります。
変更後に行うポイント・イン・タイムへのリカバリー
- 変更の中には、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼすものがあります。 制限の可能性、リカバリ状況への影響、その他の考慮事項の詳細については、「ポイント・イン・タイム・リカバリ」 を参照してください。
例えば、DROP COLUMN 文節、ALTER COLUMN 文節、または ROTATE PARTITION 文節を含む ALTER TABLE ステートメントの場合、 後続のポイント・イン・タイム・リカバリー要求に、いくつかの考慮事項や制約事項が適用されることがあります。
- ADD、ALTER、RENAME節における参照列
- 1 つの ALTER TABLE ステートメントの ADD COLUMN 文節、ALTER COLUMN 文節、または RENAME COLUMN 文節内で、列は 1 回だけ参照できます。 ただし、同じ ALTER TABLE ステートメント内で制約を追加またはドロップする場合は、同じ列を複数回参照できます。
特殊タイプはそのソース・タイプと同じ制限を受けるので、LOB 列、ROWID 列、および DECFLOAT 列に適用されるすべての構文規則は、LOB、行 ID、および DECFLOAT に基づく特殊タイプ列にも適用されます。 例えば、明示的に作成された ROWID 列が表にある場合、 ソースが行 ID である特殊タイプを指定した列を追加することはできません。
表 T に列を追加すると、T の説明のみが変更されます。 T のカタログ記述を使用してテーブル T' を作成し、DSN1COPY などの機能を使用して T を T' に効果的にコピーする場合、データがその記述と一致しないため、T' に追加された列を参照する照会は失敗します。 このような問題を回避するには、コピーを作成する前に、T の 表スペースに対して REORG ユーティリティーを実行してください。
- クローンテーブルの制限事項
- クローン関係に組み込まれた表 (基本表とその関連のクローン表) には以下の制約事項があります。
- クローン表では RUNSTATS ユーティリティーを実行できません。
クローン関係に関与するオブジェクトは、REORG ユーティリティーの実行時に FASTSWITCH データ・セット切り替え方式を使用せず、SWITCH フェーズは通常どおりに行われます。 これは、LOB XML オブジェクトだけでなく、基本表とクローン表のオブジェクト (データと索引) の両方を含みます。 また、REORG ユーティリティー制御ステートメントで CLONE と共に FASTSWITCH YES を指定することはできません。
- パーティション化された表に対して、クローン表作成時に「I」と「J」のデータ・セットの混在が存在する場合、この「I」と「J」のデータ・セットの混在は、クローン表を最初にドロップすることによってのみ変更可能です。
- カタログ表とディレクトリー表はクローン表を保有できません。
- 索引をクローン表上に作成できません。 クローン関係に組み込まれた基本表に索引を作成する場合、そのクローン表上の索引は暗黙的に作成されることになり、再ビルド・ペンディング状況になります。
- 基本表の暗黙的に作成された補助表スペース (LOB 列と XML 列の表スペース) と補助索引は、常に DEFINE YES として作成されます。
- BEFORE トリガーをクローン表上に作成できません。 基本表上に作成された BEFORE トリガー は、基本表とクローン表の両方に適用されます。
- クローンを持つ基本表は名前変更できず、クローン表を名前変更できません。
- リアルタイム統計表は、クローン表を保有できません。
- クローン関係に組み込まれたオブジェクトの補助表と補助索引をドロップできません。
その表がクローン関係に組み込まれている場合、他の表の変更が起こる可能性はありません。 表の変更が必要な場合、そのクローン表オブジェクトは、基本表オブジェクト属性が変更されるように、ドロップする必要があります。 表と索引の変更などが完了したら、クローン表オブジェクトを再作成できます。
- テーブルのオブジェクト記述子のサイズ制限
- ALTER TABLE ステートメントの結果として、30,000 バイト超のバージョン管理されたオブジェクト記述子が追加 (または更新) されるとき、以下の場合にはエラーが返される可能性があります。
- ALTER TABLE ステートメントの結果、表に最初のバージョンのオブジェクト記述子が生成される場合。
- ALTER TABLE ステートメントの結果、表に定義された 1 つ以上の索引に対して最初のバージョンのオブジェクト記述子が生成される場合。
- バージョン管理された表の既存の 10 進数列に ALTER TABLE ALTER COLUMN SET DATA TYPE ステートメントがある場合。
表のオブジェクト記述子が 30,000 バイトを超える場合、表を除去して再作成しなければならない場合があります。 あるいは、ALTER TABLE ALTER COLUMN SET DEFAULT ステートメントを発行して、表内の可変長列のデフォルト値のサイズを小さくすることによって、表のオブジェクト記述子のサイズを小さくすることができます。 また、不要な列のデフォルトをドロップして、表のオブジェクト記述子のサイズを小さくすることもできます。
- 既存のIDカラムの属性を変更する
- ID 列の既存値は、ALTER TABLE ステートメントの影響を受けません。 変更された ID 列の属性は、ALTER ステートメントの実行後に生成される値に影響します。 Db2 既存の ID カラムの値を新しい ID カラムの属性に対して検証しません。 例えば、昇順の ID 列が変更されて降順の ID 列になった場合は、NO CYCLE が有効であっても重複値が生成される可能性があります。
キャッシュ内でまだ使用されていない既存値は、失われることがあります。 また、ALTER ステートメントがエラーを戻した場合やロールバックした場合にも、キャッシュ内の値が失われる可能性があります。
START または RESTART WITH の値が、識別子列のサイクル範囲外にある場合の指定

STARTまたはRESTART WITHの識別列の値は、MINVALUEおよびMAXVALUEの値によって制約されません。 つまり、ID列のSTART WITHまたはRESTART WITHの値がMAXVALUEより大きい場合、以下の結果となります
- 昇順のID列は、RESTART WITHの値を生成し、CYCLEが有効になっている場合はMINVALUEに循環します。 NO CYCLE が有効な場合、ID列はRESTART WITH値を1回生成し、次にID列の値を生成しようとするとエラーが返されます。
- 降順シーケンスでは、RESTART WITH の値が生成され、その後 INCREMENT BY の指定に従って MINVALUE に到達するまで値が生成されます。 MAXVALUEは、この状況下では降順のID列の値の生成を制限しないため、MAXVALUEより大きな値が多数生成される可能性があります。
同様に、RESTART WITH の値が MINVALUE より小さい場合、以下の結果となります
- 降順のID列は、RESTART WITHの値を生成し、CYCLEが有効になっている場合はMAXVALUEに循環します。 NO CYCLE が有効になっている場合、シーケンスはRESTART WITH値を1回生成し、次にシーケンス値を生成しようとするとエラーが返されます。
- 昇順のID列は、RESTART WITHの値を生成し、その後、MAXVALUEに達するまでINCREMENT BYの指定に従って値を生成します。 MINVALUEは、この状況では昇順のID列の値の生成を制限しないため、MINVALUEより小さい値が多数生成される可能性があります。

- 保留中のデータ定義変更
- 以下の表に、ALTER TABLE ステートメントが保留中の定義変更として処理される原因となる文節および特定の条件をリストします。これは、ALTER TABLE ステートメントが発行された時点の定義またはデータには反映されません。 代わりに、表スペースまたは特定のパーティションが通知 REORG ペンディング状態 (AREOR) に置かれます。 表スペース、または特定の影響を受けたパーティションの再編成は、保留定義の変更を表の定義およびデータに適用します。 収容表スペースの定義は、不完全な状態であってはなりません。
条項またはオプション 次の場合に使用される保留定義変更...
ALTER COLUMN
表スペースのデータ・セットがすでに作成されており、以下のすべての条件が当てはまる場合、列のデータ・タイプ、長さ、精度、またはスケールを変更するステートメントは、表スペースの定義に対する保留中の変更です。- DDL_MATERIALIZATION サブシステム・パラメーターが ALWAYS_PENDING に設定されています。
- 基本表スペースがユニバーサル表スペースである。

DROP COLUMN 表スペースのデータ・セットは既に作成されています。
ADD PARTITION
データ・セットは既に定義されており、既存の論理パーティション間に新しいパーティションが追加されます。
通常、変更は保留中の変更であり、追加されたパーティションは通知 REORG 保留 (AREOR) 状況に置かれます。 整数が最後の論理パーティションを指定しない限り、次の論理パーティションも AREOR 状況になります。 ただし、影響を受けるパーティションに他の保留中の定義変更が存在しない場合は、制限付きの状況で、即時変更を使用できる場合があります。

ALTER PARTITION このステートメントは、以下のタイプのパーティション化表スペースの限界キーを変更します。 - 範囲パーティション化表スペース
- 表制御パーティションを持つパーティション化 (非 UTS) 表スペース。
通常、変更は保留中の変更であり、変更されたパーティションは通知 REORG 保留 (AREOR) 状況に置かれます。 整数が最後の論理パーティションを指定しない限り、次の論理パーティションも AREOR 状況になります。 ただし、影響を受けるパーティションに他の保留中の定義変更が存在しない場合は、制限付きの状況で、即時変更を使用できる場合があります。
以下の条件のいずれかが当てはまる場合、変更は即時であり、制限ステータスはありません。- 影響を受けるパーティションのデータ・セットにデータが含まれていません。
- 可能なデータ値の範囲 (実際のデータ値ではなく) のみに基づいて、データが破棄されたり、パーティション間で移動されたりする可能性はありません。 この状態は、ステートメントが限界キーに同じ既存の値を指定している場合、または最後の論理パーティションの新しい限界キーが可能なデータ値の範囲を拡張した場合に発生する可能性があります。

詳細については、「保留中のデータ定義の変更 」を参照してください。
- 保留中のデータ定義変更に関する制約事項
- 保留データ定義の変更をもたらす ALTER TABLESPACE、ALTER TABLE、および ALTER INDEX ステートメントには、以下の制約事項が適用されます。
- 保留中の変更を引き起こすオプションは、即時に有効になるオプションでは指定できません。
- 保留中の変更を引き起こすオプションは、Db2カタログ、その他のシステム・オブジェクト、または作業ファイル・データベース内のオブジェクトに対して指定することはできません。
- ALTER TABLESPACE ステートメントの DROP PENDING CHANGES 文節を、カタログ表スペースに対して指定することはできません。
- 表スペース、またはそれに含まれる表が不完全な状態にある場合は、保留中の変更を引き起こすオプションは指定できません。
- ALTER INDEX に対して、索引が定義されている表スペースまたは表の定義が完了していない場合、保留中の変更を引き起こすオプションは指定できません。
また、テーブルスペース、そのテーブル、またはテーブル上のインデックスに対して保留中のデータ定義変更が存在する場合、多くの変更操作が制限されます。 詳細については、「保留中のデータ定義変更に関する制限事項 」を参照してください。
- LOBカラムの追加
Db2 テーブルまたはパーティション内の各LOBカラムに対して、LOBテーブルスペース、補助テーブル、および補助テーブル上のインデックスを暗黙的に作成することがあります。 詳細は、「LOBテーブルスペースの暗黙的な作成 」を参照してください。
Db2 がLOBテーブルスペース、補助テーブル、および補助テーブル上のインデックスを暗黙的に作成しない場合は、CREATE TABLESPACE、CREATE AUXILIARY TABLE、およびCREATE INDEX文を発行して、これらのオブジェクトを作成する必要があります。 詳細は、「LOB表領域、補助表、および補助インデックスの明示的な作成 」を参照してください。
パーティショニングされたテーブルでは、ベーステーブルの各パーティションごとに、LOBカラムごとに個別のLOBテーブルスペース、補助テーブル、補助インデックスが必要です。
基本表がクローン関係に組み込まれている場合、暗黙的に作成される LOB 表スペースと暗黙的に作成される索引は、常に DEFINE YES 属性を使用して作成されます。
インラインLOB列の追加
ユニバーサルテーブルスペース内のテーブルでページサイズが超過した場合、INLINE LENGTH句を指定していないLOB列について、インライン長を0としてレコードサイズを再計算します Db2 。 LOB_INLINE_LENGTHサブシステムパラメータの値が0より大きい場合でも、再計算には0というレコードサイズが使用されます。 再計算後もページサイズが超過している場合、ALTER TABLE文はエラーを返します。
- ROWID列の追加
- ROWID 列を既存の表に追加すると、Db2は、行がアクセスされるたびに、その行に対して同じ固有の行 ID 値が戻されるようにします。 表に既に暗黙的に隠された ROWID 列がある場合は、Db2では、2 つの ROWID 列の値が同一であることを確認します。
表を含む表スペースが暗黙的に作成され、GENERATED BY DEFAULT として定義された ROWID 列をその表に追加すると、暗黙的に作成された ROWID に対して索引が強制されます。 表に既に暗黙的に隠された ROWID 列があり、追加する ROWID 列が GENERATED BY DEFAULT として定義されている場合、Db2は暗黙的な隠し ROWID 列を GENERATED BY DEFAULT 属性を持つように変更し、ROWID 列の強制インデックスを暗黙的に作成しません。
GENERATED BY DEFAULT として定義された ROWID 列を追加し、その ROWID が暗黙的に作成される場合、その特権セットで必要となるのは、その表上での INDEX 特権であり、バッファー・プールとストレージ・グループ上での USE 特権です。 暗黙的に作成された ROWID 索引はその表の所有者が所有します。
表スペースの再編成によって、ROWID 列の値は 影響を受けません。
- ID列の追加
空でないテーブルに識別子列を追加すると、そのテーブルを含むテーブル領域が再編成待機(REORP)状態になります Db2 。 その後、REORGユーティリティが実行されると、 Db2 は既存のすべての行のID列の値を生成し、REORG保留(REORP)ステータスを削除します。 これらの値は固有であることが保証され、その順序はシステムが決めたものです。
- 行の変更時刻のカラムを追加する
- 既存の表に行変更タイム・スタンプ列を追加する場合、既存の行の初期値は ALTER ステートメントの実行時には格納されません。APPLCOMPAT V13R1M502 またはそれ以下 :ALTER文がAPPLCOMPAT V13R1M502 またはそれ以下で実行された場合、LRSNまたはRBAは、既存の行の行変更タイムスタンプ列の値に対して暗黙的なROW CHANGE TIMESTAMP式を導出します。Db2 テーブル空間をアドバイザリREORGの保留状態にします。 既存の行の行変更タイム・スタンプ列値について、LRSN または RBA は暗黙の ROW CHANGE TIMESTAMP 式を導き出します。 ページ上の行が更新または変更されると、 暗黙の ROW CHANGE TIMESTAMP 式が変更されます。 その後、REORGユーティリティが実行されると、 Db2 は既存のすべての行の行変更タイムスタンプ列の値を生成し、REORGの保留状態を解除します。 これらの値は、その行が更新されるまで変わりません。
- XMLカラムを追加する際のXMLバージョンのサポート
- ユニバーサル表スペースにはない表に XML 列が追加される場合、その XML 列と関連 XML 表は、その表における最初の XML 列であるか、その表のその他のすべての XML 列が XML バージョンをサポートしていれば、XML バージョンをサポートします。 同様に、クローン表が基本表に関連付けられている場合、基本表内の既存の XML 列が XML バージョンをサポートしていれば、任意の XML 列および関連 XML 表は XML バージョンをサポートします。
- 列を追加した際のビューへの影響
- 表に列を追加しても、既存のビューへの影響はありません。
- 暗黙的な隠し列についての考慮事項
- 暗黙的に隠されたものとして定義された列は、ALTER ステートメントで明示的に参照できます。 例えば、暗黙的に隠された列は、参照制約またはチェック制約の一部として、あるいはマテリアライズ照会表定義として指定できます。
- 列の追加や変更による連鎖的な影響
- 表に列を追加しても、その表を参照するビューへのカスケード効果はありません。 例えば、表に列を追加しても、従属するビューに列は追加されません (これらのビューが SELECT 文節を指定して作成された場合でも)。 ただし、列を変更すると、他のカスケード効果が起こる可能性があります。 次の表は、列のデータ・タイプ、精度、位取り、または長さの変更に伴うカスケード効果の一覧です。
表 8. 列のデータ・タイプ、精度、位取り、または長さの変更に伴うカスケード効果 操作 効果 ビューによって参照されている列の変更 列のデータ・タイプ、長さ、精度、または位取りを変更すると、変更される表に従属するビューすべてが、変更時に新しい列属性を使用して再評価されます。 ビューの再生成プロセス中にエラーが発生すると、ALTER TABLE ステートメントは失敗します。 それぞれの従属ビューの新しい内部構造は変更時に保管されず、その後で従属ビューが参照されるとビューがまた再生成されます。 ALTER VIEW ステートメントを使用して従属ビューを再生成し、新しい内部構造を保管してください。 索引またはユニーク制約 (ユニーク・キーまたは主キー) のキーの中で参照されている列の変更 変更は可能ですが、小数部のある DECIMAL を浮動小数点値に変換する場合は除きます。 この場合、精度が失われることによって固有性が失われる可能性があります。 数値データ・タイプの変換の場合、索引は再ビルド・ペンディング状況になります。 文字データ・タイプの変換の場合、索引キー列は最初の書き込みアクセス時に変換され、 索引は再ビルド・ペンディング状況になりません。 パッケージの中で参照されている列の変更 変更は可能です。 変更される列がある表に従属するすべてのパッケージが無効になります。 ユーザー定義関数またはプロシージャーの本体内で参照されている列の変更 変更は可能です。 関数またはプロシージャーに関連したパッケージがある場合、そのパッケージは無効になります。
FL 500 関数がSQLテーブル関数の場合、変更時に新しい列属性で関数が再評価されます。 再評価プロセス中にエラーが発生すると、ALTER TABLE ステートメントは失敗します。
ユーザー定義関数またはプロシージャーのパラメーター内で参照されている列の変更 変更は可能です。 既存の関数またはプロシージャーの属性は変更されません。 列の新しい定義にアクセスするには、関数またはプロシージャーをドロップして再作成する必要があります。 FL 500 関数が SQL テーブル関数の場合、関数は変更時に新しい列属性を使用して再評価されます。 再評価プロセス中にエラーが発生すると、ALTER TABLE ステートメントは失敗します。
トリガーによって参照されている列の変更 変更は可能です。
その列の表に従属するトリガー・パッケージはすべて無効になります。
トリガーが拡張トリガーである場合、トリガーは再生成されて、SQL 制御ステートメントのほか、トリガー本体に含まれている非 SQL 制御ステートメントがローカル・サーバーで再バインドされます。 トリガーが再生成されると、トリガー本体の非修飾名はすべて、ネーム解決プロセスを使用して解決されます。 
行の許可または列マスクの中で参照されている列の変更 変更は可能です。 列のデータ・タイプ、精度、位取り、または長さを変更すると、その表に定義されている行の許可または列マスクに影響を与えることがあります。 列のデータ・タイプ、長さ、精度、または位取りを変更する際に、その列に列マスクが定義されているか、あるいは行の許可または列マスクがこの列を参照する場合、この行の許可および列マスクは、この列の新しい列属性を使用して再評価されます。 再評価処理時にエラーが検出されると、ALTER ステートメントからエラーが戻されます。
行の許可または列マスクの再評価時に、この行の許可または列マスクの定義で参照されるユーザー定義関数は、この行の許可または列マスクの作成時に解決されたのと同じ関数に解決される必要があります。
FL 500 変更対象のカラムがインデックスの一部であり、かつそのカラム変更が即時定義変更として実行された場合、インデックスに対して例外状態が設定される可能性があります。 可能な設定は表9 に示すとおりです:
表 9. 列が索引の中にある場合、ALTER COLUMN に対する通知設定 変更のタイプ 索引の例外状態 VARCHAR から CHAR - パディングなしインデックスの場合:PSRBDおよびAREO*、またはRBDPおよび AREO*1
- PADDED 索引の場合: AREO*
VARGRAPHIC から GRAPHIC へ - パディングなしインデックスの場合:PSRBDおよびAREO*、またはRBDPおよび AREO*1
- PADDED 索引の場合: AREO*
CHAR から VARCHAR AREO* GRAPHIC から VARGRAPHIC へ AREO* VARCHAR から VARCHAR へ AREO* (PADDED 索引の場合のみ) VARGRAPHIC から VARGRAPHIC へ AREO* (PADDED 索引の場合のみ) CHAR から CHAR へ AREO* CHAR FOR BIT DATA または VARCHAR FOR BIT DATA から BINARY または VARBINARY へ RBDPまたはPSRBD1 GRAPHIC から GRAPHIC へ AREO* 変更された数値列 RBDPまたはPSRBD1 TIMESTAMP WITHOUT TIME ZONE から TIMESTAMP WITHOUT TIME ZONE AREO* TIMESTAMP WITH TIME ZONE から TIMESTAMP WITH TIME ZONE AREO* 注:- 非パーティション化表の索引またはパーティション化表のパーティション化索引は、RBDP 状況に設定されます。 非パーティション化表の非パーティション化索引は、PSRBD 状況に設定されます。
スキーマ変更後の情報または制限例外状態のリセット方法については、「スキーマ変更のためのテーブルスペースの再編成 」を参照してください。
- パーティションの追加
表にパーティションを追加する際に、最終パーティションの境界がまだ適用されていない場合は、パーティションの追加後に適用され、最後の 2 つの論理パーティションが REORG ペンディング (REORP) 状況になります。 新しいものを追加する前に最終パーティションが REORG ペンディング状況になっていた場合は、追加したパーティションも REORG ペンディング状況になります。
詳細は、「パーティションの追加 」を参照してください。
LOB列を持つテーブルにパーティションを追加する

Db2 テーブルまたはパーティション内の各LOBカラムに対して、LOBテーブルスペース、補助テーブル、および補助テーブル上のインデックスを暗黙的に作成することがあります。 詳細は、「LOBテーブルスペースの暗黙的な作成 」を参照してください。
Db2 がLOBテーブルスペース、補助テーブル、および補助テーブル上のインデックスを暗黙的に作成しない場合は、CREATE TABLESPACE、CREATE AUXILIARY TABLE、およびCREATE INDEX文を発行して、これらのオブジェクトを作成する必要があります。 詳細は、「LOB表領域、補助表、および補助インデックスの明示的な作成 」を参照してください。

- 新たに追加されたパーティションの行形式
- RRF サブシステム・パラメーターの値が ENABLE である場合、ADD PARTITION 文節を使用して作成される新しい追加パーティション (または表スペースが増加対応パーティション表スペースであるために追加されるパーティション) は、再配列行形式で作成されます。 RRF サブシステム・パラメーターの値が DISABLE である場合、以下の表スペースを除き、新しく追加されるパーティションは基本行形式で作成されます。
- 既に基本行形式を使用しており、編集プロシージャーがある表を含む表スペースの場合、新しく作成されるパーティションは、RRF パラメーターの値に関係なく、常に基本行形式になります。
- 既に再配列行形式を使用しており、編集プロシージャーがある表を含む表スペースの場合、新しく作成されるパーティションは、RRF パラメーターの値に関係なく、常に再配列行形式になります。
- XML 表スペースの新しく作成されるパーティションは常に再配列形式になります。
- 最初のパーティションから最後のパーティションまで回転
- ALTER TABLE を実行して先頭の論理パーティションを最終の論理パーティションに循環させると、非常に時間がかかる可能性があります。 リセット操作時には、パーティションからすべての行が削除されます。 また、削除された行のキーもすべての非パーティション化索引から削除されますが、このためにはそれぞれの非パーティション化索引のスキャンが必要です。
パーティションを循環させる際に、最終パーティションの境界がまだ適用されていない場合は、ROTATE FIRST TO LAST の発行後に適用され、最後の 2 つの論理パーティションが REORG ペンディング (REORP) 状況になります。 ROTATE FIRST TO LAST の発行前に最終パーティションが REORG ペンディング状況になっていた場合は、最後の 2 つの論理パーティションが REORG ペンディング状況になります。
- 変更がアプリケーションに与える影響
- 表内の列の変更に対応して、アプリケーションの変更が必要になることがあります。 例えば、列の長さを増やした場合は、その列をフェッチする変数の長さを増やす必要があります。 列のデータ・タイプを変更した場合は、パフォーマンスの低下を防ぐために、対応する変数のデータ・タイプも変更する必要が生じることがあります。
列の名前を変更した場合や列をドロップした場合は、その列へのすべての参照を変更して、予期しない結果にならないようにする必要があります。
- パッケージの無効化
- このステートメントは、ターゲット・オブジェクトに依存するすべてのパッケージを無効にすることがあります。また、指定された文節やキーワード、およびその他の要因によっては、カスケード効果により、他の関連オブジェクトに依存するすべてのパッケージを無効にすることがあります。 詳細は、「パッケージが無効になる変更 」を参照してください。
- アプリケーションで再バインドを反映させるために必要な変更:
- パッケージを無効にしない変更でも、アプリケーションが変更を反映するには、依存パッケージの再バインドが必要になる場合があります。 詳細は、「パッケージの再バインドが必要になる可能性がある変更 」を参照してください。
- 制約の解除と保留状態の確認
- 表スペースまたはパーティションに、制約に違反する行がある表が含まれているためにチェック・ペンディング状況になっている場合、制約を除去するとチェック・ペンディング状況から開放されます。
- マテリアライズ照会表の変更
- ALTER TABLE ステートメントを使用して、現行サーバーに既に存在する表をマテリアライズ照会表として登録したり、既存のマテリアライズ照会表の属性を変更したり、既存のマテリアライズ照会表を基本表に変更したりできます。
基本表が ALTER TABLE ステートメントによって最初に変更されてマテリアライズ照会表になったときの分離レベルが、マテリアライズ照会表の分離レベルです。
照会の最適化を使用可能に設定して表をマテリアライズ照会表に変更すると、 その表は即時に照会の再書き込みに適格と見なされて使用されます。 このため、表のデータの正確性に注意してください。 必要な場合は、照会の最適化を使用不可に設定して表をマテリアライズ照会表に変更し、その後で表をリフレッシュして、照会の最適化を使用可能に設定してください。
基本表をマテリアライズ照会表に変更する場合、またはユーザー管理の照会表をシステム管理の照会表に変更する場合は、SYSIBM.SYSVIEWS 内でその表に対応する行の REFRESH_TIME 列に、現在のタイム・スタンプが格納されます。 システム管理のマテリアライズ照会表をユーザー管理のマテリアライズ照会表に変更する場合、SYSIBM.SYSVIEWS 内でその表に対応する行の REFRESH_TIME 列は変更されません。
システム管理の照会表に対しては LOAD ユーティリティーを使用できませんが、ユーザー管理のマテリアライズ照会表に対しては使用できます。
- テーブルを変更しながらユーティリティを実行する際の考慮事項
- ユーティリティーが、表を含んでいる表スペースの制御権を持っている間は、ALTER TABLE ステートメントを実行することはできません。
- フィールドプロシージャ、編集プロシージャ、および検証終了プロシージャの制限
- フィールド・プロシージャー、WITH ROW ATTRIBUTES として定義されている編集プロシージャー、および妥当性検査出口プロシージャーは、18 バイト (EBCDIC) よりも長い列名が付いた表では使用できません。 フィールド・プロシージャーまたは妥当性検査出口プロシージャーを保有する表が存在し、かつ、その列名が 18 バイトよりも長い列を追加すると、その表に対するフィールド・プロシージャーと妥当性検査出口プロシージャーは無効化されることになります。
18 バイト (EBCDIC) よりも長い列名が付いた表では、トリガーの使用を検討して、フィールド・プロシージャー、WITH ROW ATTRIBUTES として定義されている編集プロシージャー、および妥当性検査出口プロシージャーに関する機能を置き換えます。
- ALTER TABLE と同じコミットスコープにおける SQL データ変更文の制限
- ある索引に影響する SQL データ変更ステートメントは、その索引に影響する ALTER TABLE と同じコミット有効範囲内では実行できません。
- データキャプチャ変更に関する制限事項
- テーブルの状態が REORG ペンディング通知の場合、DATA CAPTURE CHANGES 文節を使用した表を変更できません。
- Db2 カタログの変更をキャプチャする
- データ・キャプチャーの情報によって拡張されたDb2カタログ表への変更をログに記録するには、ALTER TABLE xxx DATA CAPTURE CHANGES を指定します。ここで、xxx はカタログ表 (SYSIBM.xxx) の名前です。 カタログ表の変更に関するデータ収集によって、 カタログのシャドーを作成し管理することができます。
- 列が削除されたテーブルの制限事項
- 表の列のドロップは、保留定義変更です。 ドロップされた列を持つ表が含まれる表スペースは、それらの列のドロップがマテリアライズされる前の時点にリカバリーすることはできません。
- 明示的に起動される行アクセス制御
- ACTIVATE ROW ACCESS CONTROL 文節は、表の行アクセス制御を活動化する場合に使用します。 活動化されると、表のデフォルトの行の許可が暗黙的に作成され、表のどの行にもアクセスできなくなります。ただし、許可の定義で指定された許可 ID またはロールのアクセス権限を提供する別の行の許可が、後で使用可能になり、存在する場合を除きます。 デフォルトの行権限は、常に使用可能になっています。
表がデータ操作ステートメントで参照されている場合、その表に対して作成されたすべての有効な行許可 (デフォルトの行許可を含む) は、Db2によって暗黙的に適用され、表内のアクセス可能の行を制御します。 行アクセス制御検索条件は、使用可能なそれぞれの行の許可で検索条件に論理 OR 演算子を適用することによって派生されます。 この派生された検索条件は、述部、グループ化、順序付けなどのユーザー指定の操作が処理される前に、表に対するフィルターとして動作します。 この派生された検索条件によって、許可定義に指定された許可 ID またはロールが表の特定の行にアクセスできるようになります。 使用可能な行の許可を適用することによるフェッチ操作への影響の詳細については、副選択の説明を参照してください。 使用可能な行の許可を適用することによるデータ変更操作への影響の詳細については、データ変更ステートメントを参照してください。
行アクセス制御は、DEACTIVATE ROW ACCESS CONTROL 文節を使用して行アクセス制御の実施を停止するまで実施されます。
- テーブルの行アクセス制御が有効化されたときに作成される暗黙的なオブジェクト
- 表の行アクセス制御をアクティブにするために ACTIVATE ROW ACCESS CONTROL 節を使用すると、Db2は表に対するデフォルトの行許可を暗黙的に作成します。 デフォルトの行権限では、表へのすべてのアクセスが拒否されます。 暗黙的に作成された行の許可は、基本表と同じスキーマにあり、SYS_DEFAULT_ROW_PERMISSION__テーブル名 ... の形式の名前を持ちます。 最大 128 UTF-8 バイト。 「PERMISSION」の後に、下線が 2 つあることに注意してください。 この名前が固有でない場合、最後の 4 バイトは固有番号 'nnnn' 用に予約されます。ここで、'nnnn' は '0000' から始まる 4 文字の英数字で、固有名が見つかるまで 1 ずつ増分します。 デフォルトの行アクセス権の所有者は SYSIBM です。
デフォルトの行権限は、常に使用可能になっています。
デフォルトの行権限は、行アクセス制御が非アクティブになるか、表がドロップされるときにドロップされます。
- カラムアクセス制御の有効化
- ACTIVATE COLUMN ACCESS CONTROL 文節は、表の列アクセス制御を活動化する場合に使用します。 表に対するアクセスは制限されませんが、データ操作ステートメントでこの表が参照される場合は、この表に対して作成されている使用可能なすべての列マスクが適用され、照会の最終結果表で参照される列値のマスクや、データ変更ステートメントで使用される新しい値の判別が行われます。
列マスクを使用して列値をマスクする場合、それらのマスクによって最終結果表の値が決まります。 列に列マスクがあり、列 (列名の単純参照または式に組み込み) が最外部の選択リストに表示される場合、列マスクはこの列に適用され、最終結果表の値を生成します。 その列が最外部の選択リストに出現しないものの、最終結果表に関与する場合 (例えばそれがマテリアライズ表の式またはビューに出現する場合)、マテリアライズ表の式またはビューの結果表にマスクされた値が組み込まれてそれを最終結果表で使用できるように、列マスクが列に適用されます。
列マスクの適用は、そのステートメント内の他の節 (WHERE、GROUP BY、HAVING、SELECT DISTINCT、ORDER BY など) の操作に干渉することはありません。 最終結果表に戻される行は同じままです。ただし、結果の行の値は、列マスクによってマスクされている場合があります。 したがって、マスクされる列が ORDER BY ソート・キーでも使用される場合の順序は元の列値に基づき、最終結果表内のマスク値にはこの順序が反映されない可能性があります。同様に、マスク値は、SELECT DISTINCT によって実施された固有性を反映していない可能性があります。 マスクされる列が式に組み込まれていると、列マスクは式の評価が行われる前に列に適用されるため、式の結果が異なる場合があります。 照会の式が、列マスク定義内で列値をマスクするために使用されている式と同じである場合、照会の式の結果は変わらない可能性があります。 例えば、照会の式が 'XXX-XX-' || SUBSTR( SSN, 8, 4) で、列マスク定義に同じ式が指定されているとします。 この特定の例では、照会の式を列 SSN で置換して、同じ式が 2 回評価されることを回避できます。
以下は、照会の結果の列の値をマスクするためにDb2が列マスクを使用するコンテキストです。 特定の制約事項が、いくつかのコンテキストに適用されることがあります。 この制約事項は、分離リストで説明されています。
- SELECT または SELECT INTO ステートメントの最外部 SELECT 文節、あるいは列は最外部の選択リストに表示されないが最終結果表に関係する場合は、対応するマテリアライズ表式または列が表示されるビューの最外部 SELECT 文節
- SELECT FROM INSERT、UPDATE、DELETE、または MERGE ステートメントの最外部 SELECT 文節
- INSERT、UPDATE、MERGE の各ステートメント、または SET transition-variable 代入ステートメントの新しい値の派生に使用される最外部 SELECT 文節
- セット演算子を使用しないが、上記ステートメント、SET 変数代入ステートメントの右辺、VALUES INTO ステートメント、または VALUES ステートメントの最外部 SELECT 文節で使用されるスカラー全選択式にも、同じことが適用されます。
- SQL ステートメント、またはネイティブ SQL プロシージャーやコンパイル済みのユーザー定義 SQL スカラー関数に示される割り当てステートメントなどの等価のステートメントにも、同じことが適用されます。
上記コンテキストで CASE 式が使用される場合、列マスクは、WHEN 文節の検索条件には適用されません。
列マスクは、それが使用される可能性があるすべてのコンテキストを知らずに、スタンドアロン・オブジェクトとして作成されます。 最終結果表内の列値をマスクするために、列マスク定義はDb2によってステートメントにマージされます。 列マスク定義は、ステートメントのコンテキストに取り込まれると、ステートメント内の特定の SQL セマンティクスと競合することがあります。 したがって、状態によっては、ステートメントと列マスクの適用とを組み合わせることによりエラーが戻されることがあります。 以下に、エラーが戻される可能性のある状態を説明します。
- セット演算の最終結果テーブルを導出する際に使用されるセット演算子の1つがEXCEPT ALL、EXCEPT DISTINCT、INTERSECT ALL、またはINTERSECT DISTINCTであるため、列マスクは、セット演算の最終結果テーブルを導出するセレクトリストの列に適用できません。
- scalar-fullselect式の結果がセット操作EXCEPTまたはINTERSECTから派生される場合、scalar-fullselect式のselectリストの列に列マスクを適用することはできません。
- 副選択に GROUP BY 文節が含まれている場合、以下のすべての条件が満たされないと、列マスクは対応する選択リスト内の列に適用できません。
- 列は、GROUP BY 文節内の column-name を示している必要がありますが、GROUP BY 文節内の式で参照されていてはなりません。 さらに、その列マスク定義が次の条件を満たしている必要があります。
- 列マスクの適用先の列の同じ表からの列マスク定義で参照される列は、GROUP BY 文節内の列名を示していなければならない
- 列マスクが GROUP BY 文節内の式で参照されていてはならない
- 列は集約関数で指定され、その列マスク定義は以下の条件を満たす必要があります。
- 列マスク定義でスカラー全選択が参照されていてはならない
- 列マスク定義で集約関数が参照されていてはならない
- 列は、GROUP BY 文節内の column-name を示している必要がありますが、GROUP BY 文節内の式で参照されていてはなりません。 さらに、その列マスク定義が次の条件を満たしている必要があります。
- 副選択に GROUP BY 文節が含まれていて、対応する選択リスト内の列が、マテリアライズ表式またはビューの列名または式に直接的または間接的にマップしている場合、GROUP BY が指定されている副選択の列は、集約関数で指定されている必要があります。
- 副選択に GROUP BY 文節が含まれておらず、対応する選択リスト内の列が集約関数で指定されているとき、列マスク定義で以下が参照されている場合、列マスクは適用できません。
- スカラー全選択
- 集約関数
- 副選択の FROM 文節で再帰的共通表式を参照し、最終結果表の派生に再帰的共通表式の結果を使用する場合、列マスクは、再帰的共通表式の全選択で参照される列には適用できません。
- 副選択の FROM 文節に data-change-table-reference が含まれていて、INCLUDE 文節が SQL データ変更ステートメントの一部として指定されている場合、列マスクは、最外部選択リスト内の追加列の値の派生に使用する列には適用できません。
- 副選択の FROM 文節で外部表のユーザー定義関数または SQL 表のユーザー定義関数を参照し、最終結果表の派生にこの関数の結果を使用する場合、列マスクは、この関数の引数である列には適用できません。
- 最終結果表を派生させる選択リストで OLAP 指定が参照されている場合、列マスクは、OLAP 指定のパーティション式またはソート・キー式で参照される列には適用できません。
- ユーザー定義関数が NOT SECURED オプションで定義されている場合、この関数の引数は、列マスクが使用可能にされ、かつその表の列アクセス制御が活動化される列を参照していてはなりません。 この規則は、ステートメントの任意の場所で参照されるユーザー定義関数に適用されます。
バインド時の上記のエラー状態を回避するには、以下のいずれかのアクションを行う必要があります。
- ステートメントの上記コンテキストを変更するか、ステートメントから削除する
- 列マスクを使用不可にする
- 列マスクをドロップし、定義を変更して、列マスクを再作成する
- 表の列アクセス制御を非活動化する
その他の状態の場合、ステートメントに SELECT DISTINCT が含まれていて、SELECT DISTINCT の結果を直接的または間接的に派生させる列に列マスクが適用される場合、ステートメントから非 deterministic の結果が戻されることがあります。 以下の例で、このような結果が戻される可能性のある状態を示します。
- 列マスク定義で、列マスクの適用先の列の表にある他の列を参照する場合、SELECT DISTINCT の結果は deterministic であってはなりません。
- 列が組み込みスカラー関数 (COALESCE、IFNULL、NULLIF、MAX、 MIN、LOCATE、TOTALORDER など) の引数で参照される場合、SELECT DISTINCT の結果は deterministic とならない可能性があります。
- 列が集約関数の引数で参照される場合、SELECT DISTINCT の結果は deterministic とならない可能性があります。 DISTINCT が指定されている場合、関数の引数は、列マスクのある列を参照できません。
- 列が式に組み込まれ、その式に非 deterministic 関数かまたは外部アクションのある関数が含まれている場合、SELECT DISTINCT の結果は deterministic とならない可能性があります。
UNION DISTINCT を使用すると、R1 と R2 の重複行の除去はマスクされない値に基づいて行われます。 すべての行は R1 または R2 から得られたものであるため、以下の状態が 1 つ以上生じると、和集合の結果表の出力値が変わる可能性があります。
- R1 の n 番目の列に対応する式は列マスクを持つ列を参照しますが、R2 の n 番目の列に対応する式は参照しません。その逆も同様です。
- R1 と R2 の n 番目の列に対応する式が、異なる列マスクがある列を参照している。
- 列マスク定義が、列マスクの定義対象と同じターゲット列ではない列を参照し、それらの列が UNION DISTINCT 操作の一部ではない。 列マスク定義ではターゲット表の他の列を参照しないようにすることをお勧めします。
例えば、R1 の行はマスクされた値から導き出され、R2 の行はマスクされていない値から導き出されます。 結果表の行が R1 から得られたものである場合は、マスクされた値が返されます。 結果表の行が R2 から得られたものである場合は、マスクされていない値が返されます。
EXCEPT および INTERSECT の R1 と R2 の行が列マスクのある列を参照しない場合は、EXCEPT および INTERSECT を UNION と混用することができます。
列が NULL 可能でない場合、その列マスク定義では、その列には NULL 値を考慮しない可能性が高くなります。 ターゲット表の列アクセス制御が活動化された後、ターゲット表が外部結合操作で NULL が埋められた表となる場合、最終結果表の列値は NULL となる可能性があります。
INSERT、UPDATE、MERGE、または SET 遷移変数代入ステートメントの新規の値を派生させるために列が使用される場合は、マスク値でなく、オリジナルの列値が使用されます。 列に列マスクがあると、この列マスクが適用され、実行時のアクセス制御規則の評価によって、列が定数でも式でもなく確実にそれ自体に対してマスクされます。 これによって、マスク値がオリジナルの列値と必ず同じになります。 列マスクによって列がそれ自体に対してマスクされない場合、既存の行が更新されないか、新規行が挿入されず、実行時にエラーが戻されます。 新規の値を派生させるために列マスクの適用に使用される規則は、照会の最終結果表について前述したのと同じ規則に従います。 列マスクを挿入可能性および更新可能性に影響するよう使用する方法については、データ変更ステートメントを参照してください。
列マスクを適用できるのは、基本表の列のみです。 マテリアライズ表式、マテリアライズされたビュー、または共通表式列が最終結果表に関係している場合、上記のエラー状態が、マテリアライズ表式、マテリアライズされたビュー、または共通表式定義で発生することがあります。
列アクセス制御は、XMLTABLE 組み込み関数には影響を与えません。 XMLTABLE 関数の入力が、列マスクのある列の場合、列マスクは適用されません。
列アクセス制御は、DEACTIVATE COLUMN ACCESS CONTROL 文節を使用して列アクセス制御の実施を停止するまで実施されます。
- EXPLAINテーブルが生成された場合、行および列のアクセス制御は適用されません。 Db2
- EXPLAIN 表に対して、行および列のアクセス制御を実施できます。 ただし、Db2がそれらの表に行を挿入する場合、使用可能な行の許可と列マスクは適用されません。
- 行または列のアクセス制御を強制するのをやめる
- DEACTIVATE ROW ACCESS CONTROL 文節は、表の行アクセス制御の実施を停止する場合に使用します。 デフォルトの行権限はドロップされます。 その後この表がデータ操作ステートメントで参照されるとき、明示的に作成された行権限は適用されません。 この表は、付与された特権に基づいてアクセスできます。
表の列アクセス制御の強制適用を停止するために、DEACTIVATE COLUMN ACCESS CONTROL 節が使用されます。 その後この表がデータ操作ステートメントで参照されるとき、列マスクは適用されません。 最終結果表には、マスクされない列値が使用されます。
明示的に作成された行権限または列マスクがある場合、それらはそのまま残りますが、作用しません。
- 行および列のアクセス制御のための安全なトリガー
- トリガーはデータベースの保全性のために使用されます。したがって、行および列のアクセス制御 (セキュリティー) とデータベース保全性とのバランスを取る必要があります。 使用可能な行権限と列マスクは、遷移変数と遷移表の初期値には適用されません。 トリガー本体で参照される遷移変数または遷移表に対する、トリガー表に実施された行および列のアクセス制御もまた無視されます。 遷移変数および遷移表にある機密データにアクセスするためのトリガー・アクションで、SQL ステートメントのセキュリティー上の懸念がないようにするには、SECURED オプションを使用してトリガーを作成するか変更する必要があります。 トリガーがセキュアでない場合、トリガー表に対して行および列のアクセス制御を実施することはできません。
- 行および列のアクセス制御のためのユーザー定義関数のセキュリティ確保
- 行の許可または列マスク定義でユーザー定義関数を参照する場合は、機密データがこの関数に引数として渡される可能性があるため、SECURED オプションを使用してこの関数を変更する必要があります。
Db2は、SECURED オプションを考慮します。これは、ユーザーがユーザー定義関数に対するすべての変更について、変更管理監査プロシージャーを設定したことを宣言するアサーションです。 また、このような制御監査プロシージャーはユーザー定義関数のすべてのバージョンに適していると想定し、また後続のすべての ALTER FUNCTION ステートメント、または外部パッケージに対する変更は監査プロセスで確認されると想定します。
- 行および列のアクセス制御が適用されないデータベース操作
- 行および列のアクセス制御によってデータベースの保全性を損なってはなりません。 主キー、固有キー、索引、チェック制約、および参照整合性 (RI) に関係する列は、行および列のアクセス制御の対象であってはなりません。 列マスクをそのような列に定義することはできますが、キー作成、制約強制適用、RI 強制適用のプロセス中には適用されません。
- 読み取り専用カーソルおよび読み取り専用ビュー
- 読み取り専用カーソルまたは読み取り専用ビューの判別に使用する規則はバインド時に決定されるため、行および列のアクセス制御の影響は受けません。 使用可能な列マスクの適用の影響は、実行時まで不明です。 したがって、書き込み可能カーソルまたは書き込み可能ビューに対するデータ変更操作は、実行時に依然として失敗することがあります。
- システム期間のテンポラル・テーブルまたはアーカイブ対応テーブルに列を追加する際の考慮事項
- 列のデータ・タイプが特殊タイプである場合:
- 履歴表またはアーカイブ表の所有者に、特殊タイプに対する USAGE 特権が暗黙的または明示的に付与されている必要があります。
- 特殊タイプが修飾されていない場合、そのスキーマは以下のオブジェクトのスキーマと一致します。
- 履歴表内にある列の特殊タイプの暗黙スキーマは、システム期間テンポラル表の特殊タイプに対して判別される暗黙スキーマと同じです。
- アーカイブ表内にある列の特殊タイプの暗黙スキーマは、アーカイブ対応表の特殊タイプに対して判別される暗黙スキーマと同じです。
- 構文 LONG VARCHAR または LONG VARGRAPHIC は、これらのタイプの表に列を追加する場合は指定できません。 代わりに VARCHAR または VARGRAPHIC を使用してください。
- 列のデータ・タイプが LOB であり、INLINE LENGTH 文節が指定されていない場合、Db2は長さを判別します。 システム期間テンポラル表またはアーカイブ対応表の列に使用される暗黙的なインライン長は、履歴表またはアーカイブ表の対応する列にも使用されます。
- 列のデータ・タイプが LOB である場合、そのための補助オブジェクトがシステム期間テンポラル表またはアーカイブ対応表に暗黙的に作成されます。 補助オブジェクトは、履歴表またはアーカイブ表の対応する列に対しても作成されます。
- 列のデータ・タイプが特殊タイプである場合:
- 列の名称変更が統計プロファイルに与える影響
- RENAME COLUMN を指定して ALTER TABLE を実行すると、その列を参照する統計プロファイルは有効でなくなります。 名前変更された列を含むプロファイルを指定して RUNSTATS を実行すると、エラーが発生します。 RENAME COLUMN を指定して ALTER TABLE を実行した後、以下のタスクを実行します。
- 名前変更された列を参照する統計プロファイルをすべて削除します。
- 統計プロファイルを再作成します。
詳しくは、以下を参照してください。
- 鍵ラベルの要件
- 暗号化に鍵ラベルを使用するには、ページ・セット用の VSAM データ・セットを、拡張フォーマット機能を持つ SMS データ・クラス (EF が使用可能) に関連付ける必要があります。
基本表スペースおよび関連オブジェクトの鍵ラベルの判別
テーブルレベルでキーラベルが指定されると、そのキーラベルを指定されたテーブルに関連付けられた Db2 すべてのテーブル空間およびインデックス空間を DFSMS 暗号化するために使用します。 これには、基本表スペースまたは関連オブジェクトが明示的に作成されるか、暗黙的に作成されるかに関係なく、基本表スペース、補助表スペース、XML 表スペース、索引スペース、およびクローン表スペースが含まれます。 Db2 ベーステーブルと関連付けられた履歴またはアーカイブテーブル間のキーラベルの関係を強制しません。 アーカイブ表と履歴表の鍵ラベルは、基本表から独立して設定する必要があります。 テーブルレベルでキーラベルが指定されていない場合、 Db2 は、ストレージグループに指定された DFSMS にキーラベルを提供します。Db2が、表スペースまたは索引スペースのデータ・セットを割り振るために DFSMS を呼び出すと、DFSMS はその優先順位を使用して鍵ラベルを判別し、Db2で指定された鍵ラベルをオーバーライドすることができます。
DFSMS による優先順位は以下のとおりです。- RACF データ・セット・プロファイル
- JCL、動的割り振り、TSO ALLOCATE
- SMS データ・クラス構成
セキュリティ管理者が RACF データセットプロファイルにキーラベルを指定している場合、 Db2 が提供したキーラベルよりも、そのキーラベルが優先されます。 REPORT ユーティリティーを実行して、暗号化に使用される鍵ラベルを判別することができます。

DB2 で有効になっている鍵ラベルの説明

表 10. DB2 で有効な鍵ラベルを記述する、増加対応パーティション表スペースのシナリオ例。 これは、表スペースおよび索引スペース用のデータ・セットの割り振り時に、DFSMS に提供される鍵ラベルです。 シナリオ カタログ鍵ラベル値 データ・セットの割り振り時に DFSMS に提供される鍵ラベル 鍵ラベル SGKL01 を持つストレージ・グループ SG01 を作成します。 SYSSTOGROUP record - KEY LABEL: SGKL01 表スペースの作成、ストレージ・グループを使用した TBSP01、SG01 - パーティション 1 の作成 SGKL01 表の作成、表スペースに TB01、鍵ラベル付きの TBSP01、TBKL01 TBKL01 - KEY LABELの TBSP01 / SYSTABLES レコードの SYSTABLESPACE レコード: TBKL01 REORG TABLESPACE TBSP01 - パーティション 1 の再編成 TBKL01 索引の作成、表上の IX01、TB01 は索引スペースを作成します IX01 の SYSINDEXES レコード - KEY LABEL: TBKL01 TBKL01 TB01 にデータを挿入 - パーティション 2 を作成します TBKL01 表 TB01 の変更、NO KEY LABEL の指定 IX01 の TBKL01/SYSINDEXES レコードの TBSP01 / SYSTABLES レコードの SYSTABLESPACE レコード - KEY LABEL: 空のストリング TB01 にデータを挿入 - パーティション 3 を作成します SGKL01 REUSE オプションを指定した REORG TABLESPACE TBSP01 - DB2 管理データ・セットをリセットし、再利用します。 鍵ラベルに対する変更なし 
- 鍵ラベルの考慮事項
セグメント化された表スペースから最後の表がドロップされた場合、表スペースとその基礎となるデータ・セットは残ります。 鍵ラベルが有効な場合は、表スペースの SYSTABLESPACE レコードの KEYLABEL 列が消去されます。 この表スペースに新しい表が作成されると、それは前の鍵ラベルで暗号化されます。 表が暗号化されていないものとして作成される必要がある場合は、表スペースに対して REORG TABLESPACE ユーティリティーを実行します。
表スペースが DEFINE YES オプションを指定して明示的に作成され、その表スペースに鍵ラベルを持つ表が定義されている場合、表スペースに関連付けられているデータ・セットは暗号化されません。 データ・セットを暗号化するには、後続の REORG が必要です。 表スペースに関連付けられたデータ・セットの即時暗号化を必要とするユーザーは、DEFINE NO オプションを指定して表スペースを定義する必要があります。
- ハッシュ組織の構文と説明
(非推奨)
- 非推奨の関数: FL 504 ハッシュ編成テーブルは非推奨です。 Db2 12 以降、APPLCOMPAT( V12R1M504 ) 以降では、ハッシュ型テーブルを作成したり、既存のテーブルをハッシュ型に変更することはできなくなります。 既存のハッシュ編集表は引き続きサポートされますが、今後はサポートされない可能性があります。
- alter-hash-organization
-
- ADD ORGANIZE BY HASH
- 表のデータ編成にハッシュを使用することを指定します。
APPEND YES 文節を指定して表が既に定義されているか、MEMBER CLUSTER 文節を使用して表スペースが定義されている場合は、ADD ORGANIZE BY HASH を指定しないでください。
ALTER TABLE ADD ORGANIZE BY HASH は、表が増加対応パーティション表スペースまたはパーティションごとの表スペース内にある場合のみ許可されます。
ALTER TABLE ADD ORGANIZE BY HASH は、相対番号付けを使用する表スペースでは許可されません。
ADD ORGANIZE BY HASH を、基本行形式を使用する表に指定しないでください。
ユーザー指定のクラスタリング索引が存在する場合は、ADD ORGANIZE BY HASH を指定しないでください。
ADD ORGANIZE BY HASH は、グローバル一時表には指定しないでください。
ADD ORGANIZE BY HASH を指定した ALTER TABLE が実行されると、以下のようになります。
- ハッシュ・キーの一部である列がすべて更新できなくなります。 ハッシュ・キーの列を更新する SQL ステートメントはエラーを返します。
- 表を含む表スペース全体を再編成する必要があります。
この節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージ、またはカスケード効果によって関連オブジェクトに依存するパッケージが無効になる可能性があります。 パッケージを無効化する変更を参照してください。
- 一意 (Unique)
- Db2がハッシュ・キー列の固有性を強制することを指定します。ハッシュ・キーと同じ値を持つ 2 つ以上の行が表に含まれないようにします。
- (列名,...)
- 列名のリストによって、行の配置先を決定するために使用されるハッシュ・キーが定義されます。この column-name は、表の列を識別する非修飾 名でなければなりません。 同じ列を複数回指定してはなりません。指定する列は NOT NULL として定義されている必要があります。 指定する列の数は 64 を超えてはいけません。また、その長さ属性の合計が、 255 を超えてはいけません。 指定する列は、次のタイプの列であってはなりません。
- LOB 列
- DECFLOAT 列
- XML 列
- 前述のいずれかのデータ・タイプに基づく特殊タイプ列
キー内のすべての文字およびグラフィック・ストリングの列は、同じコード化スキームを使用しなければなりません。
PARTITION BY RANGE として表を定義する場合、列名リストでは、表の partition-expression に指定されているすべての列名を指定する必要があり、partition-expression と同じ順序で列名を指定する必要があります。 表の partition-expression に含まれる列数より多い列を ORGANIZE BY 文節が含む場合は、partition-expression によってパーティション番号が決定されます。
- HASH SPACE 整数K | |MG
- 表に事前割り振りする固定ハッシュ・スペースの量を指定します。 表が範囲内パーティションである場合、これは各パーティションのスペースです。
デフォルトは、増加対応パーティション表スペース内の表の場合は 64M、またはパーティション表スペースの各パーティションの場合は 64M です。
- K
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数の値に 1024 を掛けた値を指定します。 整数値は、256~268,435,456の範囲でなければなりません。
- M
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数の値に 1,048,576 を掛けた値を指定します。 整数値は1~262,144の範囲でなければなりません。
- G
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数 の値を 1,073,741,824 を掛けた値を指示します。 範囲テーブルによるパーティショニングの場合は、 整数値は 1~256の範囲でなければならず、非パーティショニングテーブルの場合は、1~131,072の範囲でなければなりません。
- ALTER ORGANIZATION SET HASH SPACE整数
- 表のデータ編成に使用される固定ハッシュ・スペースを変更します。 表は、ハッシュ編成を使用するように定義されている必要があります。
表が範囲ごとのパーティションとして定義されている場合、integer によって指定される値はパーティションごとであり、表の各パーティションに適用されます。 範囲内でない表の場合、integer は表全体に適用されます。
新規ハッシュ・スペース値は、REORG ユーティリティーを使用して表スペースが再編成されるときに適用されます。
- HASH SPACE 整数K | |MG
- 表に事前割り振りする固定ハッシュ・スペースの量を指定します。 表が範囲内パーティションである場合、これは各パーティションのスペースです。
- K
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数の値に 1024 を掛けた値を指定します。 整数値は、256~268,435,456の範囲でなければなりません。
- M
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数の値に 1,048,576 を掛けた値を指定します。 整数値は1~262,144の範囲でなければなりません。
- G
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数 の値を 1,073,741,824 を掛けた値を指示します。 範囲テーブルによるパーティショニングの場合は、 整数値は 1~256の範囲でなければならず、非パーティショニングテーブルの場合は、1~131,072の範囲でなければなりません。
ALTER ORGANIZATION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 制限の可能性、リカバリ状況への影響、その他の考慮事項については、「ポイント・イン・タイム・リカバリ」 を参照してください。
- DROP ORGANZIATION
- DROP ORGANIZATION を参照してください。
- partition-hash-space
-
- HASH SPACE 整数K | |MG
- パーティション・エレメントと関連付けられたパーティションに事前割り振りする固定ハッシュ・スペースの量を指定します。 パーティション・エレメントで HASH SPACE を省略した場合は、ORGANIZE BY CLAUSE に指定されている HASH SPACE 値が使用されます。
partition-element の HASH SPACE キーワードは、ハッシュ編成を使用するように表が定義されている場合のみ指定する必要があります。
- K
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数の値に 1024 を掛けた値を指定します。 整数値は、256~268,435,456の範囲でなければなりません。
- M
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数の値に 1,048,576 を掛けた値を指定します。 整数値は1~262,144の範囲でなければなりません。
- G
- ハッシュ・スペースのサイズをバイト単位で指定するために、整数 の値を 1,073,741,824 を掛けた値を指示します。 範囲テーブルによるパーティショニングの場合は、 整数値は 1~256の範囲でなければならず、非パーティショニングテーブルの場合は、1~131,072の範囲でなければなりません。
- ハッシュ組織に関する注意事項
(非推奨)
- 非推奨の関数: FL 504 ハッシュ編成テーブルは非推奨です。 Db2 12 以降、APPLCOMPAT( V12R1M504 ) 以降では、ハッシュ型テーブルを作成したり、既存のテーブルをハッシュ型に変更することはできなくなります。 既存のハッシュ編集表は引き続きサポートされますが、今後はサポートされない可能性があります。
- テーブルのハッシュ構成に変更が加えられた場合
- ハッシュ編成を使用する表の変更は、ユニーク・ハッシュ・キーの施行に関しては即時に有効になります。 一方、表スペースの物理編成がハッシュ編成に変換されるのは、REORG 後です。
範囲ごとの表スペースでは、個々のパーティションが HASH SPACE を指定するように変更されている場合、新しいハッシュ・スペース値は、個々のパーティションで REORG ユーティリティーが実行された後に有効になります。
- ハッシュ編成を使用するテーブルのバッファプール、DSSIZE、およびMAXPARTITIONSに関する考慮事項
- Db2は、表の定義に基づいてハッシュ編成の最適バッファー・プール・サイズを計算し、明示的に作成された表スペースのバッファー・プールを使用して、計算されたバッファー・プール・サイズを妥当性検査します。 バッファー・プール・サイズが異なる場合、Db2はエラーを戻します。
表が範囲ごとの表スペースの場合、表スペースの DSSIZE 値は、各パーティションの HASH SPACE 仕様に収まるように十分に大きくする必要があります。
増加対応パーティション表スペースにある表の場合は、表スペースの DSSIZE 値および MAXPARTITIONS 値から計算された合計スペースが、明示的または暗黙的に指定された HASH SPACE に対して十分大きい必要があります。
- ハッシュ空間値の変更
- 範囲ごとの表スペースのすべてのパーティションについて HASH SPACE 値を変更するか、または増加対応パーティション表スペースの合計 HASH SPACE を変更するには、ALTER ORGANIZATION SET HASH SPACE (integer) 節を使用します。 パーティション表スペースのすべてのパーティションではなく、複数の HASH SPACE 値を変更するには、パーティションごとに個別の ALTER TABLE ステートメントを指定し、ALTER PARTITION (integer) 節および HASH SPACE (integer) 節を指定する必要があります。
- ハッシュ空間と Db2 ページのサイズ
- 指定されたハッシュ・スペースが 64 MB (Db2のデフォルト) 以下である場合、Db2はDb2システム・ページ用のスペースを追加します。 指定されたハッシュ・スペースが 64 MB よりも大きい場合、Db2はDb2システム・ページ用にハッシュ・スペースの一部を使用します。 Db2システム・ページに必要なスペースの量は、SEGSIZE と PAGESIZE によって異なります。 SEGSIZEおよび/またはPAGESIZEが大きくなればなるほど、 Db2 システムページの要件も大きくなります。 Db2 システムページ用に、SEGSIZEの最大値(64)とPAGESIZEの最大値( )で、最大5MBまで予約できます。 32K
- ハッシュ空間とDSSIZE
- 特定の表スペースの特性に応じて、Db2は、ハッシュ・オーバーフロー域のスペースを予約する必要があります。 したがって、ハッシュ・スペースの量を DSSIZE 値と同じにすることはできません。 指定できるハッシュ・スペースの最大量は、DSSIZE 値より約 20% 少なくなります。 Db2 ハッシュ空間の量が大きすぎる場合、エラーを返します。 ハッシュ・スペースの量が多すぎる場合、DSSIZE の値を大きくするか、またはハッシュ・スペースの量を減らしてください。
- ハッシュ型テーブルにAPPENDを指定する
- 追加処理は、ハッシュ編成を使用する表には適用できません。これは、 ハッシュ編成にはキー・クラスタリングが存在しないためです。 ハッシュ編成を持つ表への挿入操作の場合、Db2は内部ハッシュ・アルゴリズムを使用して、行の位置を判別します。
- ハッシュ組織のテーブルに関する制限事項
- ハッシュ編成を使用する表は以下の制約事項の対象になります。
- 表が既にハッシュ編成を使用している場合、Db2はエラーを戻します。
- ハッシュ編成を使用するように定義される表は、LOB 表スペースにも XML 表スペースにも作成できません。
- ハッシュ・キーに指定されている列のデータ・タイプは変更できません。
- ALTER ADD HASH ORGANIZATION 文節または ALTER DROP ORGANIZATION 文節を使用して表が変更された後では、パーティション・レベルの REORG は許可されません。
- MAXROWS 文節は、ハッシュ編成を使用する表の表スペースのハッシュ・オーバーフロー域に対してのみ適用できます。 各ページの固定ハッシュ域は、保持できる限りの数の行を含み、最大 255 行です。
ALTER TABLE ROTATE PARTITION RESET のログへの影響
テーブルのパーティションがローテーションされるとき、そのテーブルに非パーティション化インデックスが定義されている場合、パーティションの個々のインデックスキーを削除する必要があります Db2 。 個々のインデックスキーの削除により、大量のログレコードが書き込まれる可能性があります。 
- 代替構文およびシノニム
- Db2ファミリー内のDb2または他の製品の以前のリリースとの互換性を提供するために、Db2は以下の節をサポートします。
- NO CACHE のシノニムとして NOCACHE (単一文節)
- NO CYCLE のシノニムとして NOCYCLE (単一文節)
- NO MINVALUE のシノニムとして NOMINVALUE (単一文節)
- NO MAXVALUE のシノニムとして NOMAXVALUE (単一文節)
- NO ORDER のシノニムとして NOORDER (単一文節)
- PART integer VALUES は、PARTITION integer ENDING AT の代替として指定できます。
- VALUESをENDING ATの同義語として
- WITH NO DATA のシノニムとして DEFINITION ONLY
- DROP MATERIALIZED QUERY のシノニムとして SET MATERIALIZED QUERY AS DEFINITION ONLY
- DROP MATERIALIZED QUERY のシノニムとして SET SUMMARY AS DEFINITION ONLY
- ADD MATERIALIZED QUERY (全選択) のシノニムとして SET MATERIALIZED QUERY AS (全選択)
- ADD MATERIALIZED QUERY (全選択) のシノニムとして SET SUMMARY AS (全選択)
- TIMEZONE は、 TIME ZONE の代替として指定できます。
例 ALTER TABLE
- 例 1
- テーブル DSN8C10 の列 DEPTNAME。DEPT は VARCHAR(36) として作成されました。 その長さを 50 バイトに増やします。 また、テーブル DSN8C10. DEPT に列 BLDG を追加します。 新しい列を、SBCS データが入る文字ストリング列として記述します。
ALTER TABLE DSN8C10.DEPT ALTER COLUMN DEPTNAME SET DATA TYPE VARCHAR(50) ADD BLDG CHAR(3) FOR SBCS DATA; - 例 2
- テーブルDSN8C10.EMPに DSN8EAEM という検証手順を割り当てます。
ALTER TABLE DSN8C10.EMP VALIDPROC DSN8EAEM; - 例 3
- 現在の検証手順をテーブルDSN8C10.EMP から解除します。 このステートメントの実行後は、表に検証プロシージャーはなくなります。
ALTER TABLE DSN8C10.EMP VALIDPROC NULL; - 例 4
- ADMRDEPT を DSN8C10. DEPT の自己参照制約の外部キーとして定義します。
ALTER TABLE DSN8C10.DEPT FOREIGN KEY(ADMRDEPT) REFERENCES DSN8C10.DEPT ON DELETE CASCADE; - 例 5
- 従業員が受け取ることのできる最低給与が1万ドルであることを確認するチェック制約を、テーブルDSN8C10.EMP に追加します。
ALTER TABLE DSN8C10.EMP ADD CHECK (SALARY >= 10000); - 例 6
- PRODINFO テーブルを変更して、製品バージョン表 (PRODVER_1) 内の非 1 次ユニーク・キーを参照する外部キーを定義します。 ユニーク・キー
の列は VERNAME、RELNO です。
ALTER TABLE PRODINFO FOREIGN KEY (PRODNAME,PRODVERNO) REFERENCES PRODVER_1 (VERNAME,RELNO) ON DELETE RESTRICT; - 例 7
- 表 DEPT に、列 DEPTNAME で定義されたユニーク索引があると想定します。 DEPT 表に、列 DEPTNAME からなる、KEY_DEPTNAME という名前のユニーク・キー制約を追加します。
ALTER TABLE DSN8C10.DEPT ADD CONSTRAINT KEY_DEPTNAME UNIQUE( DEPTNAME ); - 例 8
- 基本表 TRANSCOUNT をマテリアライズ照会表として登録します。 全選択の結果は、既存の表にある列と一致する列セットである必要があります (同じ列数、同じ列定義、同じ名前)。 挿入、更新、削除の操作、および REFRESH TABLE ステートメントを使用して表を保守できるように、マテリアライズ照会表をユーザー管理のものとして定義します。
ALTER TABLE TRANSCOUNT ADD MATERIALIZED QUERY (SELECT ACCTID, LOCID, YEAR, COUNT(*) as cnt FROM TRANSadd GROUP BY ACCTID, LOCID, YEAR ) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; - 例 9
- 表 TB1 には列があり、COL1 が CHAR(4) FOR BIT DATA WITH DEFAULT 'AB' として定義されているとします。 表に保管される値は X'C1C24040' になります。 以下の ALTER TABLE ステートメントが実行されると、表に保管される結果の値は BX'C1C240400000' になります。
ALTER TABLE TB1 ALTER COLUMN COL1 SET DATA TYPE BINARY(6);
例 10
表スペースにキー・ラベル DSN8C10.EMP を追加し、表に関連付けられているすべての表スペースおよび索引スペースを暗号化します。ALTER TABLE DSN8C10.EMP KEY LABEL SECUREKEY01;
列アクセス制御の例
- 例 1
- SELECT DISTINCT ステートメントは、CUSTOMER 表にあるデータに基づいて、SALARY 値が 100,000 の行を 1 つ戻します。 SALARY 値をマスクするために、列マスク SALARY_MASK が作成されます。 CUSTOMER 表の列アクセス制御が活動化されると、SALARY 列に列マスクが適用されます。 'MGR' ID (またはロール) を持つユーザーが SELECT DISTINCT ステートメントを発行します。 SELECT DISTINCT ステートメントは、重複の除去は SALARY 列のマスクされない値に基づいているため、依然として 1 つの行を戻しますが、その行で戻される値は、マスクされた SALARY 値 (125,000 か 110,000 のいずれか) に基づきます。
CUSTOMER 表は、以下のようになっています。
Salary COMMISSION EMPID 100,000 25,000 123456 100,000 10,000 654321 CREATE MASK SALARY_MASK ON CUSTOMER FOR COLUMN SALARY RETURN CASE WHEN(SESSION_USER = 'MGR') THEN SALARY + COMMISSION ELSE SALARY END ENABLE; COMMIT; ALTER TABLE CUSTOMER ACTIVATE COLUMN ACCESS CONTROL; COMMIT; SELECT DISTINCT SALARY FROM CUSTOMER; - 例 2
- T1 abd T2 表のデータに基づいて、COALESCE 関数を使用する SELECT DISTINCT ステートメントは、T1.C1 値が 1 の行を戻します。 T1.C1 の値をマスクするために、列マスク C1_MASK が作成されます。 表 T1 の列アクセス制御が活動化されると、表 T1 の列 C1 に列マスクが適用されます。 'EMP' ID (またはロール) を持つユーザーが SELECT DISTINCT ステートメントを発行します。 SELECT DISTINCT ステートメントは、重複の除去は COALESCE 関数からの T1.C1 のマスクされない値に基づいているため、依然として 1 つの行を戻しますが、この行で戻される値は、COALESCE 関数からの T1.C1 のマスクされた値に基づきます。 戻される値は、2 または 3 のいずれかです。
INSERT INTO T1(C1) VALUES(1); INSERT INTO T1(C1) VALUES(1); INSERT INTO T2(C1) VALUES(2); INSERT INTO T2(C1) VALUES(3); CREATE MASK C1_MASK ON T1 FOR COLUMN C1 RETURN CASE WHEN(SESSION_USER = 'EMP') THEN NULL ELSE C1 END ENABLE; COMMIT; ALTER TABLE T1 ACTIVATE COLUMN ACCESS CONTROL; COMMIT; SELECT DISTINCT COALESCE(T1.C1, T2.C1) FROM T1, T2; - 例 3
- CUSTOMER 表のデータに基づくと、カリフォルニア (CA) とイリノイ (IL) 州の最大収入は同じで、50,000 です。このため、SELECT DISTINCT ステートメントは 1 つの行を戻します。 収入値をマスクするために列マスク INCOME_MASK が作成されます。 CUSTOMER 表の列アクセス制御が活動化されると、INCOME 列に列マスクが適用され、MAX 集約関数が評価されます。 ただし、列マスク INCOME_MASK は、イリノイ州では収入値 0 を 100,000 としてマスクします。 このため、イリノイ州では最大収入は 100,000 になりますが、カリフォルニア州の最大収入は 50,000 のままです。 SELECT DISTINCT ステートメントの述部で X.B が使用されています。このため、MAX(INCOME) 関数のオリジナルの INCOME 値とオリジナルの結果を保存しておく必要があります。 したがって、SELECT DISTINCT ステートメントは依然として 1 つの行を戻しますが、この行の値は deterministic でない場合があります。つまり、この値は 'CA' 行からの 50,000、または 'IL' 行からの 100,000 である場合があります。
CUSTOMER 表は、以下のようになっています。
STATE INCOME CA 40,000 CA 50,000 IL 0 IL 10,000 IL 50,000 CREATE MASK INCOME_MASK ON CUSTOMER FOR COLUMN INCOME RETURN CASE WHEN(INCOME = 0) THEN 100000 ELSE INCOME END ENABLE; COMMIT; ALTER TABLE CUSTOMER ACTIVATE COLUMN ACCESS CONTROL; COMMIT; SELECT DISTINCT B FROM (SELECT STATE, MAX(INCOME) FROM CUSTOMER GROUP BY STATE) X(A, B) WHERE B > 10000; - 例 4
- 式
INCOME + RAND()は、RAND 関数が非 deterministic 関数であるため、非 deterministic です。 SELECT DISTINCT ステートメントは、CUSTOMER 表のデータに基づいて 2 つの特殊行を戻す可能性が高くなります。 しかし、1 つの行のみを戻すことがあります。 収入値をマスクするために列マスク INCOME_MASK が作成されます。 CUSTOMER 表の列アクセス制御が活動化されると、INCOME 列に列マスクが適用されます。これによって、両方の行のマスク値が同じになります。 RAND 関数は非 deterministic 関数であるため、SELECT DISTINCT ステートメントは、依然として 2 つの特殊行を戻す可能性が高いですが、1 行のみを戻すことがあります。RAND 関数によって生じた不確実性によって SELECT DISTINCT ステートメントの結果が非 deterministic になります。CUSTOMER 表は、以下のようになっています。
STATE INCOME CA 40,000 CA 50,000 CREATE MASK INCOME_MASK ON CUSTOMER FOR COLUMN INCOME RETURN CASE WHEN(INCOME = 40,000) THEN 50000 ELSE INCOME END ENABLE; COMMIT; ALTER TABLE CUSTOMER ACTIVATE COLUMN ACCESS CONTROL; COMMIT; SELECT DISTINCT A FROM (SELECT INCOME + RAND() FROM CUSTOMER) X(A) WHERE A > 10000; - 例 5
- 市が SJ、SFO、または OKLD の場合に州と市の名前を示す値を戻すために、CUSTOMER 表の STATE 列に対して列マスク STATE_MASK が作成されます。 その他の場合、市は戻されず、州だけが戻されます。 CUSTOMER 表の列アクセス制御が活動化されると、STATE 列を使用して結果をグループ化する SELECT ステートメントが発行されます。 ただし、列マスク STATE_MASK で参照される CITY 列はグループ化列でないため、列マスク STATE_MASK がこのステートメントには適切でないことを示すバインド時エラーが戻されます。
CUSTOMER 表は、以下のようになっています。
STATE CITY INCOME CA SJ 40,000 CA SC 30,000 CA SB 60,000 CA SFO 80,000 CA OKLD 50,000 CA SJ 70,000 NY NY 50,000 CREATE MASK STATE_MASK ON CUSTOMER FOR COLUMN STATE RETURN CASE WHEN(CITY = 'SJ') THEN CITY||', '||STATE WHEN(CITY = 'SFO') THEN CITY||', '||STATE WHEN(CITY = 'OKLD') THEN CITY||', '||STATE ELSE ' , '||STATE END ENABLE; COMMIT; ALTER TABLE CUSTOMER ACTIVATE COLUMN ACCESS CONTROL; COMMIT; SELECT STATE, AVG(INCOME) FROM CUSTOMER GROUP BY STATE HAVING STATE = 'CA';
