CREATE TABLE ステートメント

CREATE TABLE ステートメントは表を定義します。 定義には、その表の名前と、その列の名前および属性を含める必要があります。 定義には、主キーやチェック制約など、表の他の属性を含めることができます。

作成済み一時表を作成するには、CREATE GLOBAL TEMPORARY TABLE ステートメントを使用します。 宣言済み一時表を宣言するには、DECLARE GLOBAL TEMPORARY TABLE ステートメントを使用します。

呼び出し

このステートメントはアプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行することができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID には DBADM 権限が含まれるか、CREATETAB 権限と以下の追加許可の組み合わせが含まれている必要があります。
  • 以下のいずれかの特権または権限:
    • 表スペースでの USE 特権
    • SYSADM 権限
    • SYSCTRL 権限
  • 加えて、以下のいずれかの特権または権限:
    • データベースに対する IMPLICIT_SCHEMA 権限 (表の暗黙的または 明示的スキーマ名が存在しない場合)
    • スキーマに対する CREATEIN 特権 (表のスキーマ名が既存のスキーマを指す場合)
    • スキーマに対する SCHEMAADM 権限 (表のスキーマ名が既存のスキーマを指している場合)
副表が定義されている場合、少なくとも以下のいずれかの条件を満たしている必要があります。
  • 許可 ID は表階層のルート表の所有者と同じでなければなりません。
  • 許可 ID が持つ特権に、表階層のルート表が含まれるスキーマに対する SCHEMAADM 権限が含まれている必要があります。
  • 許可 ID が持つ特権に、DBADM 権限が含まれている必要があります。
外部キーを定義するには、ステートメントの許可 ID に親表に対する以下のいずれかの特権がなければなりません。
  • 表に対する REFERENCES 特権
  • 指定された親キーのそれぞれの列に対する REFERENCES 特権
  • 表に対する CONTROL 特権
  • スキーマに対する SCHEMAADM 権限 (親表のスキーマ名が既存のスキーマを指している場合)
  • DBADM 権限
マテリアライズ照会表を定義するには、以下の条件を満たしている必要があります。
  • ステートメントの許可 ID は、全選択に指定されている表またはビューのそれぞれに対して以下の特権が少なくとも 1 つ必要です (グループを介して保持する特権は対象外です)。
    • その表またはビューに対する SELECT 特権
    • 表またはビューに対する CONTROL 特権
    • 表またはビューが含まれるスキーマに対する SELECTIN 特権
    • 表またはビューが含まれるスキーマに対する DATAACCESS 権限
    • DATAACCESS 権限
  • ステートメントの許可 ID が、全選択に指定されている表のそれぞれに対して以下の特権が少なくとも 1 つ必要です (基本表を変更してマテリアライズ照会表と関連付けるために必要です)。
    • 表またはビューに対する ALTER 特権
    • 表またはビューに対する CONTROL 特権
    • 表またはビューが含まれるスキーマに対する SCHEMAADM 権限
    • DBADM 権限
マテリアライズ照会表に関連付けられたステージング表を定義するには、ステートメントの許可 ID に以下の特権が必要です。
  • マテリアライズ照会表に対する以下の特権のうち、少なくとも 1 つが必要です。
    • マテリアライズ照会表に対する ALTER 特権
    • マテリアライズ照会表に対する CONTROL 特権
    • マテリアライズ照会表が含まれるスキーマに対する SCHEMAADM 権限
    • DBADM 権限
  • マテリアライズ照会表の全選択で検出されるそれぞれの表またはビューに対する以下の特権のうち、少なくとも 1 つが必要です。
    • その表またはビューに対する SELECT 特権
    • 表またはビューに対する CONTROL 特権
    • 表またはビューが含まれるスキーマに対する SELECTIN 特権
    • 表またはビューが含まれるスキーマに対する DATAACCESS 権限
    • データベースに対する DATAACCESS 権限
    さらに、マテリアライズ照会表の全選択で検出されるそれぞれの表またはビューに対する以下の特権のうち、少なくとも 1 つが必要です。
    • 表またはビューに対する ALTER 特権
    • 表またはビューに対する CONTROL 特権
    • 表またはビューが含まれるスキーマに対する SCHEMAADM 権限
    • DBADM 権限

構文

Read syntax diagramSkip visual syntax diagram CREATE TABLE IF NOT EXISTS table-name Element-listOFtype-name1typed-table-optionsLIKEtable-name1view-namenicknamecopy-optionsas-result-tablecopy-optionsmaterialized-query-definitionstaging-table-definition ORGANIZE BYROWCOLUMNROW USING1Dimensions-clauseKEY SEQUENCEsequence-key-specINSERT TIME DATA CAPTURENONECHANGES tablespace-clauses distribution-clause partitioning-clause COMPRESS YESADAPTIVECOMPRESS YES STATICCOMPRESS NO VALUE COMPRESSION WITH RESTRICT ON DROP NOT LOGGED INITIALLY CCSIDASCIIUNICODE SECURITY POLICYpolicy name OPTIONS(,table-option-namestring-constant)
Element-list
Read syntax diagramSkip visual syntax diagram ( ,column-definitionperiod-definitionunique-constraintreferential-constraintcheck-constraint )
Column-definition
Read syntax diagramSkip visual syntax diagram column-name Data-type2Column-options
Data-type
Read syntax diagramSkip visual syntax diagramBuilt-in-typedistinct-type-name3structured-type-nameREF( type-name2)
Built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( precision-integer,0, scale-integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA4CCSID ASCIICCSID UNICODECCSID 1208CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)CCSID ASCIICCSID UNICODECCSID 1208GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)CCSID ASCIICCSID UNICODECCSID 1208VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)(integer)XMLBOOLEANSYSPROC.DB2SECURITYLABEL56
Column-options
Read syntax diagramSkip visual syntax diagramNOT NULLLob-options7SCOPEtyped-table-nametyped-view-name8CONSTRAINTconstraint-namePRIMARY KEYUNIQUEReferences-clauseCHECK(check-condition)constraint-attributes9Default-clausegenerated-clauseINLINE LENGTHinteger10COMPRESS SYSTEM DEFAULTCOLUMNSECURED WITHsecurity-label-nameNOT HIDDENIMPLICITLY HIDDEN
Lob-options
Read syntax diagramSkip visual syntax diagram LOGGEDNOT LOGGED NOT COMPACTCOMPACT
References-clause
Read syntax diagramSkip visual syntax diagram REFERENCES parent-table-namenickname (,column-name)rule-clauseconstraint-attributes
Rule-clause
Read syntax diagramSkip visual syntax diagram ON DELETE NO ACTIONON DELETERESTRICTCASCADESET NULL ON UPDATE NO ACTIONON UPDATE RESTRICT
Constraint-attributes
Read syntax diagramSkip visual syntax diagram ENFORCEDNOT ENFORCEDTRUSTEDNOT TRUSTED ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION
Default-clause
Read syntax diagramSkip visual syntax diagram WITH DEFAULT Default-values
Default-values
Read syntax diagramSkip visual syntax diagramconstantdatetime-special-registeruser-special-registerCURRENT SCHEMACURRENT MEMBERNULLcast-function(constantdatetime-special-registeruser-special-registerCURRENT SCHEMA)EMPTY_CLOB()EMPTY_DBCLOB()EMPTY_NCLOB()EMPTY_BLOB()
Generated-clause
Read syntax diagramSkip visual syntax diagramGENERATEDALWAYSBY DEFAULTIdentity-optionsas-row-change-timestamp-clauseGENERATEDALWAYSas-generated-expression-clauseas-row-transaction-timestamp-clauseas-row-transaction-start-id-clause
Identity-options
Read syntax diagramSkip visual syntax diagram AS IDENTITY (11START WITH1numeric-constantINCREMENT BY1numeric-constantNO MINVALUEMINVALUEnumeric-constantNO MAXVALUEMAXVALUEnumeric-constantNO CYCLECYCLECACHE 20NO CACHECACHEinteger-constantNO ORDERORDER)
As-row-change-timestamp-clause
Read syntax diagramSkip visual syntax diagram12 FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
As-generated-expression-clause
Read syntax diagramSkip visual syntax diagram AS ( generation-expression )
As-row-transaction-timestamp-clause
Read syntax diagramSkip visual syntax diagram13 AS ROW BEGINEND
As-row-transaction-start-id-clause
Read syntax diagramSkip visual syntax diagram14 AS TRANSACTION START ID
Period-definition
Read syntax diagramSkip visual syntax diagram PERIOD SYSTEM_TIMEBUSINESS_TIME ( begin-column-name , end-column-name )
Unique-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-nameUNIQUEPRIMARY KEY ( ,column-name ,BUSINESS_TIMEWITHOUT OVERLAPS ) constraint-attributes
Referential-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-name FOREIGN KEY ( ,column-name ) references-clause
Check-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-name CHECK ( Check-condition ) constraint-attributes
Check-condition
Read syntax diagramSkip visual syntax diagramsearch-conditionFunctional-dependency
Functional-dependency
Read syntax diagramSkip visual syntax diagram column-name(,column-name) DETERMINED BY column-name(,column-name)
Typed-table-options
Read syntax diagramSkip visual syntax diagram HIERARCHYhierarchy-nameUnder-clause typed-element-list
Under-clause
Read syntax diagramSkip visual syntax diagram UNDER supertable-name INHERIT SELECT PRIVILEGES
Typed-element-list
Read syntax diagramSkip visual syntax diagram ( ,OID-column-definitionwith-optionsunique-constraintcheck-constraint )
OID-column-definition
Read syntax diagramSkip visual syntax diagram REF IS OID-column-name USER GENERATED
With-options
Read syntax diagramSkip visual syntax diagram column-name WITH OPTIONS Column-options
As-result-table
Read syntax diagramSkip visual syntax diagram(,column-name) AS ( fullselect ) WITH NO DATAWITH DATA
Materialized-query-definition
Read syntax diagramSkip visual syntax diagram(,column-name) AS ( fullselect ) refreshable-table-options
Copy-options
Read syntax diagramSkip visual syntax diagram INCLUDINGEXCLUDINGCOLUMNDEFAULTS EXCLUDING IDENTITYCOLUMN ATTRIBUTESINCLUDING IDENTITYCOLUMN ATTRIBUTES
Refreshable-table-options
Read syntax diagramSkip visual syntax diagram DATA INITIALLY DEFERRED REFRESH DEFERREDIMMEDIATE ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION MAINTAINED BY SYSTEMMAINTAINED BYUSERREPLICATIONFEDERATED_TOOL
Staging-table-definition
Read syntax diagramSkip visual syntax diagram(,staging-column-name) FOR table-name2 PROPAGATE IMMEDIATE
Dimensions-clause
Read syntax diagramSkip visual syntax diagram DIMENSIONS (,column-name(,column-name))
Sequence-key-spec
Read syntax diagramSkip visual syntax diagram ( ,column-nameSTARTINGFROMconstantENDINGATconstant ) ALLOW OVERFLOWDISALLOW OVERFLOWPCTFREEinteger
Tablespace-clauses
Read syntax diagramSkip visual syntax diagramIN,tablespace-nameCYCLENO CYCLE INDEX INtablespace-name15LONG IN,tablespace-name
Distribution-clause
Read syntax diagramSkip visual syntax diagram DISTRIBUTE BY HASH(,column-name)REPLICATIONRANDOM
Partitioning-clause
Read syntax diagramSkip visual syntax diagram PARTITION BY RANGE Range-partition-spec
Range-partition-spec
Read syntax diagramSkip visual syntax diagram ( ,partition-expression ) ( ,partition-element )
Partition-expression
Read syntax diagramSkip visual syntax diagram column-name NULLS LASTNULLS FIRST
Partition-element
Read syntax diagramSkip visual syntax diagramPARTITIONpartition-nameBoundary-specpartition-tablespace-optionsboundary-specEVERY(constantduration-label16)constantduration-label16
Boundary-spec
Read syntax diagramSkip visual syntax diagramStarting-clause17Ending-clause
Starting-clause
Read syntax diagramSkip visual syntax diagram STARTING FROM (,constantMINVALUEMAXVALUE)constantMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
Ending-clause
Read syntax diagramSkip visual syntax diagram ENDING AT (,constantMINVALUEMAXVALUE)constantMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
Partition-tablespace-options
Read syntax diagramSkip visual syntax diagramINtablespace-nameINDEX INtablespace-nameLONG INtablespace-name
Duration-label
Read syntax diagramSkip visual syntax diagramYEARYEARSMONTHMONTHSDAYDAYSHOURHOURSMINUTEMINUTESSECONDSECONDSMICROSECONDMICROSECONDS
Notes:
  • 1 If you specify a dimensions clause, key sequence, or insert time, specifying ROW USING is optional unless the default table organization for the database is COLUMN, in which case specifying ROW USING is mandatory.
  • 2 If the first column-option chosen is a generated-clause with a generation-expression, then the data-type can be omitted. It will be determined from the resulting data-type of the generation-expression.
  • 3 The specified distinct type cannot have any data type constraints and the source type cannot be an anchored data type.
  • 4 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).
  • 5 DB2SECURITYLABEL is the built-in distinct type that must be used to define the row security label column of a protected table.
  • 6 A column of type DB2SECURITYLABEL, NOT NULL WITH DEFAULT is implicit and cannot be explicitly specified (SQLSTATE 42842). The default value for a column of type DB2SECURITYLABEL is the session authorization ID's security label for write access.
  • 7 The lob-options clause only applies to large object types (BLOB, CLOB, and DBCLOB) and distinct types based on large object types.
  • 8 The SCOPE clause only applies to the REF type.
  • 9 The default-clause and generated-clause cannot both be specified for the same column definition (SQLSTATE 42614).
  • 10 INLINE LENGTH applies only to columns defined as structured, XML, or LOB types.
  • 11 The same clause must not be specified more than once.
  • 12 Data type is optional for a row change timestamp column if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(6).
  • 13 Data type is optional for row-begin and row-end timestamp columns if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(12).
  • 14 Data type is optional for a transaction-start-ID timestamp columns if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(12).
  • 15 Specifying which table space contains a table's indexes can be done when the table is created. If the table is a partitioned table, the index table space for a nonpartitioned index can be specified with the IN clause of the CREATE INDEX statement.
  • 16 This syntax for a partition-element is valid if only one partition-expression exists with a numeric or datetime data type.
  • 17 The first partition-element must include a starting-clause and the last partition-element must include an ending-clause.

説明

システム保守、ユーザー保守、フェデレーテッド・ツール保守、レプリケーション保守のマテリアライズ照会表 (シャドー表) は、それぞれを区別する必要がない限り、マテリアライズ照会表 という総称で呼びます。

IF NOT EXISTS
指定した名前の表が現在のデータベースおよびスキーマに既に存在するために表を作成できなくてもエラー・メッセージを表示しないことを指定します。 このオプションは、通常、SQL コマンドを実行するスクリプト・アプリケーションに使用します。 以下を抑止するとします。Table not foundエラー・メッセージ。スクリプト化されたアプリケーションは影響を受けることも停止することもありません。
このオプションを使用する場合は、以下の条件が適用されます
  • AS SELECT 節と一緒に IF NOT EXISTS オプションを使用することはできません。 AS SELECT 節と一緒に IF NOT EXISTS オプションを使用すると、構文エラーになります。
  • 表の作成を妨げている他のエラーがある場合を除き、表が作成されなくても CREATE TABLE メッセージが戻されます。 指定した名前の表が既に存在していると、作成に失敗したことが無視されるからです。
  • 既存の表とコマンドで指定した表は比較されません。つまり、それらの表のサイズが異なっている可能性があります。 既存の表は現在のサイズのままです。 行の内容は変更されません。 アプリケーションで、ターゲットの表と行が予期されるものであることを確認する必要があります。
table-name
表の名前を指定します。 暗黙または明示の修飾子を含む名前は、カタログに記述されている表、ビュー、ニックネーム、または別名を指定するものであってはなりません。 スキーマ名は SYSIBM、SYSCAT、SYSFUN、または SYSSTAT であってはなりません (SQLSTATE 42939)。
element-list
表の列と制約の定義を含む、表の要素を定義します。
列定義
列の属性を定義します。
column-name
表を構成する列の名前を指定します。 名前を修飾したり、表の複数の列に対して同じ名前を使用したりすることはできません (SQLSTATE 42711)。

行オーガナイズ 表には、以下のものがあります。

  • 4K ページ・サイズの場合、最大 500 列。行サイズは 4005 を超えてはなりません。
  • 8K ページ・サイズの場合、最大 1012 列。行サイズは 8101 を超えてはなりません。
  • 16K ページ・サイズの場合、最大 1012 列。行サイズは 16,293 を超えてはなりません。
  • 32K ページ・サイズの場合、最大 1012 列。行サイズは 32,677 を超えてはなりません。

カラム・オーガナイズ 表は、ページ・サイズに関係なく最大 1012 列を持つことができます。列のバイト・カウントは 32,677 を超えてはなりません。 拡張行サイズ・サポートは、 カラム・オーガナイズ 表には適用されません。

詳しくは、 行サイズの制限を参照してください。

data-type
列のデータ・タイプを指定します。
組み込みタイプ (built-in-type)
以下の組み込みデータ・タイプのいずれか。
SMALLINT
短精度整数。
[INTEGER | INT]
長精度整数。
BIGINT
64 ビット整数。
[DECIMAL | DEC | NUMERIC | NUM] (precision-integerscale-integer)
10 進数。
  • precision integer は、総桁数を指定します。 1 から 31 の範囲内でなければなりません。 デフォルトは 5 です。
  • scale integer は、小数点以下の桁数を指定します。 負にすることも、precision より大きくすることもできません。 デフォルトは 0 です。
FLOAT (整数)
単精度または倍精度の浮動小数点数。 指定の長さの範囲に応じて次のように処理されます。
  • 1 から 24 の場合、数値で単精度が使用されます。
  • 25 から 53 の場合、数値で倍精度が使用されます。
FLOAT の代わりに次を指定できます。
REAL
単精度浮動小数点数。
DOUBLE
倍精度浮動小数点数。
DOUBLE PRECISION
倍精度浮動小数点数。
FLOAT
倍精度浮動小数点数。
DECFLOAT(精度-整数)
10 進浮動小数点数。 precision integer は総桁数 (16 または 34) を指定します。 デフォルトは 34 です。
[CHARACTER | CHAR] (整数 [OCTETS | CODEUNITS32])
指定したコード単位数の固定長文字ストリング。 この数は 1 から 255 (OCTETS) または 1 から 63 (CODEUNITS32) の範囲にすることができます。 デフォルトは 1 です。
[VARCHAR | CHARACTER VARYING | CHAR VARYING] (integer [OCTETS | CODEUNITS32])
指定したコード単位数の最大長の、可変長文字ストリング。 この数は 1 から 32672 (OCTETS) または 1 から 8168 (CODEUNITS32) の範囲にすることができます。
FOR BIT DATA
列の内容をビット (バイナリー) データとして扱うように指定します。 他のシステムとのデータ交換の過程で、 コード・ページ変換は行われません。 比較は、データベース照合シーケンスに関係なくバイナリーで行われます。
CCSID
列に格納されるストリング・データのコード化スキームを指定します。 CCSID 節が指定されていない場合のデフォルトは、表の CCSID です。
ASCII
ストリング・データがデータベース・コード・ページでエンコードされることを指定します。 表が Unicode 表の場合は、CCSID ASCII を指定することはできません (SQLSTATE 56031)。
UNICODE、1208、1200
ストリング・データが Unicode でエンコードされることを指定します。 文字データは UTF-8、GRAPHIC データは UTF-16 BE になります。 CCSID の 1208 と 1200 は、CCSID UNICODE でのシノニムです。 CCSID UNICODE は、SBCS データベースには指定できません (SQLSTATE 560AA)。
表が Unicode 表でない場合、CCSID UNICODE を指定して列を作成できますが、以下の規則が適用されます。
  • 表を作成する前に、データベース構成で代替照合シーケンスを指定する必要があります (SQLSTATE 56031)。 CCSID UNICODE 列は、データベース構成で指定した代替照合シーケンスを使用して照合されます。

    サポートされている唯一の代替照合シーケンスは IDENTITY_16BIT です。

  • 列を GRAPHIC データ・タイプにすることはできません。
  • アンカー・データ・タイプは、CCSID UNICODE を使用して作成された列にアンカーすることはできません (SQLSTATE 428HS)。
  • 同じ表に CCSID UNICODE 文節と DATA CAPTURE CHANGES 文節の両方を指定することはできません (SQLSTATE 42613)。
  • 作成済み一時表および宣言済み一時表に、CCSID UNICODE で宣言された列を含めることはできません (SQLSTATE 56031)。
  • CREATE SCHEMA ステートメントでは CCSID UNICODE 列を指定することはできません (SQLSTATE 53090)。
  • ロード操作において、例外表の列の CCSID は、その操作に対応するターゲット表の列の CCSID と同じでなければなりません (SQLSTATE 428A5)。
  • SET INTEGRITY ステートメントにおいて、例外表の列の CCSID は、そのステートメントに対応するターゲット表の列の CCSID と同じでなければなりません (SQLSTATE 53090)。
  • イベント・モニター・データのターゲット表の列を、CCSID UNICODE として宣言してはなりません (SQLSTATE 55049)。
[CLOB | CHARACTER LARGE OBJECT | CHAR LARGE OBJECT] (integer [K | M | G] [OCTETS | CODEUNITS32])
指定したコード単位数の最大長の、文字ラージ・オブジェクト・ストリング。 デフォルトは、1,048,576 (1M) コード単位です。
長さの整数に 1024 (キロ)、1,048,576 (メガ)、または 1,073,741,824 (ギガ)を乗算する場合は、 K (キロ)、 M (メガ)、または G (ギガ)のいずれかの乗数を指定します。
  • 使用する乗数に関係なく、結果の長さは CLOB 列の最大長 (2,147,483,646 (OCTETS の場合) または 536,870,911 (CODEUNITS32 の場合)) によって制限されます。 K、M、または G の倍数がこの最大長を少しでも超えると (例えば、2G = 2,147,483,648)、代わりに最大長が使用されます。
  • データ・タイプと長さ指定の間、または長さ整数と KM、または G 乗数との間には、任意の数のスペース (ゼロ・スペースを含む) を使用できます。 例えば、以下の指定内容はすべて同等であり、有効です。
    CLOB(50K)
    CLOB(50 K)
    CLOB (50   K)
  • KM、または G 乗数は、大文字でも小文字でも指定できます。

Unicode データベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は、NLS_STRING_UNITS グローバル変数または string_units データベース構成パラメーターの値によって決定されます。 Unicode 以外のデータベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は OCTETS です。

OCTETS
長さ属性の単位がバイトであることを指定します。
CODEUNITS32
長さ属性の単位が Unicode UTF-32 コード単位であることを指定します。このコード単位は、文字数に近くなります。 これは、データ・タイプの基となるコード・ページには影響を与えません。 データ値の実際の長さは、データが UTF-32 に変換されたかのように UTF-32 コード単位をカウントすることで決定されます。 CODEUNITS32 は、Unicode データベースでのみ指定できます (SQLSTATE 560AA)。
GRAPHIC (整数 [CODEUNITS16 | CODEUNITS32])
指定の長さの固定長グラフィック・ストリング。1 から 127 の 2 バイト、1 から 127 の CODEUNITS16、または 1 から 63 の CODEUNITS32 の範囲で指定できます。 デフォルト長は 1 です。
VARGRAPHIC (整数 [CODEUNITS16 | CODEUNITS32])
指定の最大長の、可変長グラフィック・ストリング。1 から 16336 の 2 バイト、1 から 16336 の CODEUNITS16、または 1 から 8168 の CODEUNITS32 の範囲で指定できます。
DBCLOB (整数 [K | M | G] [CODEUNITS16 | CODEUNITS32])
文字ラージ・オブジェクト・ストリング (最大長を 2 バイト、Unicode UTF-16 コード単位、または Unicode UTF-32 コード単位で指定)。 デフォルトは、1,048,576 (1M) コード単位です。
長さの整数に 1024 (キロ)、1,048,576 (メガ)、または 1,073,741,824 (ギガ)を乗算する場合は、 K (キロ)、 M (メガ)、または G (ギガ)のいずれかの乗数を指定します。
  • 使用する乗数に関係なく、結果の長さは DBCLOB 列の最大長 (1,073,741,823 (2 バイトまたは CODEUNITS16 の場合) または 536,870,911 (CODEUNITS32 の場合)) によって制限されます。 K、M、または G の倍数がこの最大長を少しでも超えると (例えば、1G = 1,073,741,824)、代わりに最大長が使用されます。
  • データ・タイプと長さ指定の間、または長さ整数と KM、または G 乗数との間には、任意の数のスペース (ゼロ・スペースを含む) を使用できます。 例えば、以下の指定内容はすべて同等であり、有効です。
    DBCLOB(50K)
    DBCLOB(50 K)
    DBCLOB (50   K)
  • KM、または G 乗数は、大文字でも小文字でも指定できます。

Unicode データベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は、NLS_STRING_UNITS グローバル変数または string_units データベース構成パラメーターの値によって決定されます。 Unicode 以外のデータベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は CODEUNITS16 です。

CODEUNITS16
長さ属性の単位が Unicode UTF-16 コード単位であることを指定します。このコード単位は、2 バイトでのカウント数と同じです。 CODEUNITS16 は、Unicode データベースでのみ指定できます (SQLSTATE 560AA)。
CODEUNITS32
長さ属性の単位が Unicode UTF-32 コード単位であることを指定します。 これは、データ・タイプの基となるコード・ページには影響を与えません。 データ値の実際の長さは、データが UTF-32 に変換されたかのように UTF-32 コード単位をカウントすることで決定されます。 CODEUNITS32 は、Unicode データベースでのみ指定できます (SQLSTATE 560AA)。
[NATIONAL CHARACTER | NATIONAL CHAR | NCHAR] (整数)
指定の長さの固定長ストリング。 デフォルト長は 1 です。

NATIONAL CHARACTER タイプは、ストリング単位も定義する nchar_mapping データベース構成パラメーターの値に基づいて、固定長文字ストリングまたは固定長 GRAPHIC ストリングのいずれかにマップされます。

[NATIONAL CHARACTER VARYING | NATIONAL CHAR VARYING | NCHAR VARYING | NVARCHAR] (整数)
指定の最大長の可変長ストリング。

NATIONAL CHARACTER VARYING タイプは、ストリング単位も定義する nchar_mapping データベース構成パラメーターの値に応じて、可変長文字ストリングまたは可変長 GRAPHIC ストリングのいずれかにマップされます。

[NATIONAL CHARACTER LARGE OBJECT | NCHAR LARGE OBJECT | NCLOB] (integer [K | M | G])
ラージ・オブジェクト・ストリング (最大長を指定)。

このデータ・タイプは、ストリング単位も定義する nchar_mapping データベース構成パラメーターの現行値に応じて、文字ラージ・オブジェクト (CLOB) または 2 バイト文字ラージ・オブジェクト (DBCLOB) のいずれかにマップされます。 長さの整数に指定できる値、および K (キロ)、 M (メガ)、または G (ギガバイト) の乗数の使用方法については、CLOB または DBCLOB パラメーターの説明 (いずれか該当する方) を参照してください。

BINARY (整数)
指定の長さの固定長バイナリー・ストリング。1 から 255 バイトの範囲でなければなりません。 デフォルト長は 1 です。
[VARBINARY | BINARY VARYING] (整数)
指定した最大長の可変長バイナリー・ストリング。1 から 32672 バイトの範囲でなければなりません。
[BLOB | BINARY LARGE OBJECT] (integer [K | M | G])
バイナリー・ラージ・オブジェクト・ストリング (最大長を指定)。 デフォルトは 1,048,576 (1M) バイトです。
長さの整数に 1024 (キロ)、1,048,576 (メガ)、または 1,073,741,824 (ギガ)を乗算する場合は、 K (キロ)、 M (メガ)、または G (ギガ)のいずれかの乗数を指定します。
  • 使用する乗数に関係なく、結果の長さは BLOB 列の最大長 (2,147,483,647 バイト) によって制限されます。 K、M、または G の倍数がこの最大長を少しでも超えると (例えば、2G = 2,147,483,648)、代わりに最大長が使用されます。
  • データ・タイプと長さ指定の間、または長さ整数と KM、または G 乗数との間には、任意の数のスペース (ゼロ・スペースを含む) を使用できます。 例えば、以下の指定内容はすべて同等であり、有効です。
    BLOB(50K)
    BLOB(50 K)
    BLOB (50   K)
  • KM、または G 乗数は、大文字でも小文字でも指定できます。
日数
日付。
時刻
時刻。
TIMESTAMP(integer) または TIMESTAMP
タイム・スタンプ。 integer は、秒未満の精度を 0 (秒) から 12 (ピコ秒) で指定します。 デフォルトは 6 (マイクロ秒) です。
XML
XML 文書。 XML 列には整形式 XML 文書だけを挿入できます。
XML 列には、以下の制限事項があります。
  • 列は、 XML データの索引以外の索引の一部にすることはできません。 したがって、この列を主キーまたはユニーク制約の列として組み込むことはできません (SQLSTATE 42962)。
  • 列は参照制約の外部キーであってはなりません (SQLSTATE 42962)。
  • 列にデフォルト値 (WITH DEFAULT) を指定することはできません (SQLSTATE 42613)。 列が NULL 可能な場合、その列のデフォルトは NULL 値です。
  • 列は、分散キーとしては使用できません (SQLSTATE 42997)。
  • その列は、データ・パーティション・キーとしては使用できません (SQLSTATE 42962)。
  • その列は、マルチディメンション・クラスタリング (MDC) 表の編成に使用できません (SQLSTATE 42962)。
  • 列は、範囲がクラスター化された表では使用できません (SQLSTATE 429BG)。
  • 列は、VALIDATED 述部以外のチェック制約では参照できません (SQLSTATE 42621)。

タイプ XML の列を作成すると、その列に対する XML パス索引が作成されます。 タイプ XML の最初の列を作成するときには、表レベルの XML 領域索引も作成されます。 これらの索引の名前は、 SQL の後に文字タイム・スタンプ (yymmddhhmmssxxx) が続きます。 スキーマ名は SYSIBM です。

BOOLEAN
ブール値。
SYSPROC.DB2SECURITYLABEL
保護対象表の行セキュリティー・ラベル列を定義するために使用しなければならない組み込み特殊タイプ。 組み込み特殊タイプ DB2SECURITYLABEL の列の基礎データ・タイプは、VARCHAR(128) FOR BIT DATA です。 1 つの表にはタイプ DB2SECURITYLABEL の列を最大で 1 個しか組み込めません (SQLSTATE 428C1)
特殊タイプ名 (distinct-type-name)
ユーザー定義タイプの中で特殊タイプであるものを示します。 スキーマ名を伴わない特殊タイプ名を指定した場合、 その特殊タイプ名は SQL パスのスキーマから探索することによって解決されます (このパスは、 静的 SQL の場合は FUNCPATH プリプロセス・オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。

特殊タイプを使用して列を定義する場合、その列のデータ・タイプはその特殊タイプになります。 列の長さと位取りは、特殊タイプのソース・タイプの長さと位取りになります。 指定した特殊タイプは、いかなるデータ・タイプ制約も持つことができません。また、ソース・タイプがアンカー・データ・タイプであってはなりません (SQLSTATE 428H2)。

特殊タイプを使用して定義された列が参照制約の外部キーである場合、 主キーの対応する列のデータ・タイプは、同じ特殊タイプでなければなりません。

構造化タイプ名
ユーザー定義タイプの中で構造化タイプであるものを示します。 構造化タイプ名の指定にスキーマ名が含まれていない場合、 その構造化タイプ名は SQL パスのスキーマから探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH 前処理オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。

構造化タイプを使用して列を定義する場合、その列の静的データ・タイプはその構造化タイプになります。 その列には、structured-type-name のサブタイプである動的タイプを持つ値を組み込むことができます。

構造化タイプを使用して定義された列を、主キー、ユニーク制約、外部キー、索引キー、 または分散キー内で使うことはできません (SQLSTATE 42962)。

列が、構造化タイプを使用して定義されていて、ネストのいずれかのレベルで参照タイプ属性をもっている場合、その参照タイプ属性の有効範囲は解除されます。 そのような属性を間接参照操作で使用するには、 CAST 指定を使って SCOPE を明示的に指定する必要があります。

REF (type-name2)
型付き表への参照。 type-name2 の指定にスキーマ名が含まれていない場合、 そのタイプ名は SQL パス上のスキーマを探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH プリプロセス・オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。 この列の基礎を成すデータ・タイプは、 CREATE TYPE ステートメントの REF USING 節で type-name2 に対して指定された表示データ・タイプに基づくか、 または type-name2 の入ったデータ・タイプ階層のルート・タイプに基づきます。
列オプション
表の列に関連した追加オプションを定義します。
NOT NULL
列に NULL 値が入るのを防止します。

NOT NULL を指定しない場合、列に NULL 値を含めることができます。また、そのデフォルト値は、NULL 値または WITH DEFAULT 節で指定される値のいずれかになります。

NOT HIDDEN または IMPLICITLY HIDDEN
列を隠し列と定義するかどうかを指定します。 列を表の暗黙的参照に組み込むかどうか、SQL ステートメントで明示的に参照できるかどうかは隠し属性によって決まります。 デフォルトは NOT HIDDEN です。
NOT HIDDEN
列を表の暗黙的参照に組み込むこと、および列を明示的に参照できることを指定します。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り列は SQL ステートメントから不可視であることを指定します。 例えば、表に IMPLICITLY HIDDEN 節によって定義された列が組み込まれている場合、暗黙的に隠された列は SELECT * の結果に組み込まれません。 しかし、暗黙的に隠された列の名前を明示的に参照する SELECT の結果については、結果表にその列が組み込まれます。

IMPLICITLY HIDDEN を表のすべての列に指定することはできません (SQLSTATE 428GU)。

lob-オプション
LOB データ・タイプのオプションを指定します。
LOGGED
列に対して行われた変更をログに書き込むことを指定します。 このような列のデータは、 データベース・ユーティリティー (RESTORE DATABASE など) によってリカバリー可能です。 LOGGED はデフォルト値です。
NOT LOGGED
列に対して行われた変更をログに書き込まないことを指定します。 これは、インラインでない LOB データにのみ適用されます。

NOT LOGGED は、コミットやロールバックの操作には影響しません。つまり、トランザクションがロールバックされても、LOB の値がログ記録されるか否かに関係なくデータベースの整合性は保持されます。 ロギングされないので、ロールフォワード操作中、 バックアップまたはロード操作の後の LOB データは、 ロールフォワード操作中に、ログ・レコードがあれば再生されたはずの LOB 値をゼロで置換したものになります。 クラッシュ・リカバリーの過程で、コミットされた変更とロールバックされた変更すべてに、 予期された結果が反映されます。

COMPACT
後続の付加操作で使用するためのスペースを LOB ストレージ域の最後に残すことなく、LOB 列の値で消費されるディスク・スペースを最小限にすることを指定します (LOB 値が使用する最後のグループ内の余分なディスク・ページすべてを解放します)。 このようにしてデータを保管した場合、列に対する付加操作 (長さが増加する操作) のパフォーマンスが低下することがあります。
NOT COMPACT
列の LOB 値に対する将来の変更に備えて、 いくらかのスペースを挿入するように指定します。 これがデフォルトです。
SCOPE
参照タイプ列の有効範囲を指定します。

間接参照演算子の左オペランド、または DEREF 関数の引数として使用する列には、 すべて有効範囲を指定する必要があります。 参照タイプ列の有効範囲の指定は、後で ALTER TABLE ステートメントを実行するときまで遅らせることができます。これにより、ターゲット表を定義できるようになります (通常は、相互参照表の場合)。

型付き表名 (typed-table-name)
型付き表の名前。 この表は既に存在しているものか、作成する表と同じ名前のものでなければなりません (SQLSTATE 42704)。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-table-name のタイプを表します (SQLSTATE 428DM)。 column-name に割り当てられた値が、 typed-table-name に存在する行を 実際に参照しているかどうかを示す検査は行われません。
型付きビュー名
型付きビューの名前。 このビューは既に存在しているものか、 作成するビューと同じ名前のものでなければなりません (SQLSTATE 42704)。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-view-name のタイプを表します (SQLSTATE 428DM)。 column-name に割り当てられた値が、 typed-view-name に存在する行を実際に参照しているかどうかを示す検査は行われません。
CONSTRAINT 制約名
制約の名前を指定します。 constraint-name (制約名) は、 同じ CREATE TABLE ステートメントに既に指定されている制約を指定するものであってはなりません (SQLSTATE 42710)。

この節が省略された場合は、表に定義されている既存の制約の ID の中でユニークな 18 バイトの長さの ID がシステムによって生成されます。 (ID は、 SQL と、それに続く、タイム・スタンプ・ベースの関数によって生成される 15 個の数字のシーケンスで構成されます。)

PRIMARY KEY 制約またはユニーク制約とともに使用した場合、 この constraint-name は、制約をサポートするために作成される SPECIFICATION ONLY 索引の名前として使用されます。

PRIMARY KEY
これは、1 つの列からなる主キーを定義する簡単な方法です。 つまり、PRIMARY KEY が列 C の定義で指定されている場合、 その効果は、PRIMARY KEY(C) 節を独立した節として指定する場合と同じです。

表が副表である場合、主キーはスーパー表から継承されるので、 主キーを指定することはできません (SQLSTATE 429B3)。

ROW CHANGE TIMESTAMP 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。

行開始列、行終了列、およびトランザクション開始 ID 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。

unique-constraint の説明の中の PRIMARY KEY を参照してください。

UNIQUE
これは、1 つの列からなるユニーク・キーを定義する簡単な方法です。 すなわち、UNIQUE を列 C の定義に指定すると、UNIQUE(C) 節を独立した節として指定した場合と同じ結果になります。

表が副表である場合、ユニーク制約はスーパー表から継承されるので、ユニーク制約を指定することはできません (SQLSTATE 429B3)。

unique-constraint の説明の中の UNIQUE を参照してください。

参照節
これは、1 つの列からなる外部キーを定義する簡単な方法です。 つまり、references-clause が列 C の定義に指定されている場合、 その効果は、 列として C しか指定されていない FOREIGN KEY 節の一部として references-clause が指定された場合と同じになります。

referential-constraint の説明の references-clause を参照してください。

CHECK (チェック条件)
これは、1 つの列に適用されるチェック制約を定義する簡単な方法です。 CHECK (check-condition) の説明を参照してください。
デフォルト節
列のデフォルト値を指定します。
WITH
オプション・キーワード。
DEFAULT

挿入時に値が指定されなかった場合、あるいは INSERT または UPDATE で値が DEFAULT に指定された場合のデフォルト値を指定します。 デフォルトのキーワードの後にデフォルト値が指定されていない場合、 ALTER TABLE に示すように、デフォルト値は列のデータ・タイプによって異なります。 列定義で、この節を generated-clause とともに指定することはできません (SQLSTATE 42614)。

列を XML として定義する場合、デフォルト値は指定できません (SQLSTATE 42613)。 可能なデフォルト値は NULL だけです。

列が型付き表の列に基づいている場合、 デフォルト値の定義時には特定のデフォルト値を指定する必要があります。 型付き表のオブジェクト ID の列には、 デフォルト値を指定することはできません (SQLSTATE 42997)。

列が特殊タイプを使用して定義される場合、列のデフォルト値は、特殊タイプにキャストされたソース・データ・タイプのデフォルト値になります。

構造化タイプを使用して列を定義する場合は、 default-clause を指定できません (SQLSTATE 42842)。

column-definition から DEFAULT を省略すると、 その列のデフォルト値として NULL 値が使用されます。 そのような列を NOT NULL と定義すると、その列には有効なデフォルトはなくなります。

デフォルト値
default-values に指定できるデフォルト値のタイプは、以下のとおりです。
constant
列のデフォルト値として定数を指定します。 指定する定数は、次の条件を満たしていなければなりません。
  • 割り当ての規則に従って、その列に割り当てることができる値でなければなりません。
  • その列が浮動小数点数データ・タイプとして定義されている場合を除き、浮動小数点の定数を指定してはなりません。
  • 列のデータ・タイプが 10 進浮動小数点数の場合は、数値定数または 10 進浮動小数点特殊値でなければなりません。 浮動小数点定数はまず DOUBLE として解釈され、次にターゲット列が DECFLOAT である場合は 10 進浮動小数点数に変換されます。 DECFLOAT(16) 列では、16 桁を超える精度を持つ 10 進定数は、CURRENT DECFLOAT ROUNDING MODE 特殊レジスターにより指定される丸めモードを使用して丸められます。
  • 定数が 10 進定数の場合、その列のデータ・タイプの位取りを超えるゼロ以外の数字を含めてはなりません (例えば、DECIMAL(5,2) の列のデフォルト値として 1.234 を指定することはできません)。
  • 指定する定数が 254 バイトを超えてはなりません。この制約には、引用符文字や 16 進定数の X などの接頭部文字も含まれます。さらに、定数が cast-function の引数の場合には、完全修飾された関数名から取った文字や括弧も含めて、この制限を超えてはなりません。
datetime-特殊レジスター
INSERT、UPDATE、または LOAD の実行時における日時特殊レジスターの値 (CURRENT DATE、 CURRENT TIME、または CURRENT TIMESTAMP) を、その列のデフォルト値として指定します。 その列のデータ・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません (例えば、 CURRENT DATE を指定した場合、データ・タイプは DATE でなければなりません)。
ユーザー特殊レジスター (user-special-register)
INSERT、UPDATE、または LOAD の実行時におけるユーザー特殊レジスターの値 (CURRENT USER、SESSION_USER、SYSTEM_USER) を、その列のデフォルトとして指定します。 その列のデータ・タイプは、 ユーザー特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 なお、SESSION_USER の代わりに USER を、 CURRENT USER の代わりに CURRENT_USER を指定することもできます。
CURRENT SCHEMA
INSERT、UPDATE、または LOAD の実行時における CURRENT SCHEMA 特殊レジスターの値を、 その列のデフォルト値として指定します。 CURRENT SCHEMA を指定した場合、その列のデータ・タイプは、 CURRENT SCHEMA 特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。
CURRENT MEMBER
INSERT、UPDATE、または LOAD の実行時における CURRENT MEMBER 特殊レジスターの値を、 その列のデフォルト値として指定します。 CURRENT MEMBER を指定する場合、列のデータ・タイプは整数の割り当てを許容するものでなければなりません。
ヌル
その列のデフォルト値として NULL を指定します。 NOT NULL が指定された場合は、DEFAULT NULL を同じ列定義に指定できますが、その列をデフォルト値に設定しようとするとエラーが生じます。
キャスト機能 (cast-function)
この形式のデフォルト値は、特殊タイプ (distinct type)、 BLOB、または日時 (DATE、TIME、または TIMESTAMP) データ・タイプとして定義された列に対してのみ使用することができます。 特殊タイプの場合は、BLOB や日時タイプに基づくものでなければ、関数名を列の特殊タイプの名前に一致させる必要があります。 スキーマ名で修飾されている場合には、 その特殊タイプのスキーマ名と同じでなければなりません。 修飾されていない場合には、 関数の解決で得られるスキーマ名は特殊タイプのスキーマ名と同じでなければなりません。 日時タイプに基づく特殊タイプで、デフォルト値が定数の場合、 必ず関数を使用する必要があります。さらに、その関数名は、 暗黙または明示のスキーマ名 SYSIBM を持つ特殊タイプのソース・タイプ名に一致していなければなりません。 他の日時列の場合は、対応する日時関数も使用できます。 BLOB または、BLOB に基づく特殊タイプの場合も、関数を使用する必要があります。 その関数名は、暗黙または明示のスキーマ名 SYSIBM を持つ BLOB でなければなりません。
constant
引数として定数を指定します。 指定する定数は、 特殊タイプのソース・タイプに関する定数の規則 (特殊タイプでない場合は、 データ・タイプに関する定数の規則) に従っていなければなりません。 cast-function が BLOB の場合には、 定数としてストリング定数を指定する必要があります。
datetime-特殊レジスター
CURRENT DATE、CURRENT TIME、または CURRENT TIMESTAMP を指定します。 列の特殊タイプのソース・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません。
ユーザー特殊レジスター (user-special-register)
CURRENT USER、SESSION_USER、または SYSTEM_USER を指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、 少なくとも 8 バイトの長さのストリング・データ・タイプでなければなりません。 cast-function が BLOB の場合には、 長さ属性が 8 バイト以上でなければなりません。
CURRENT SCHEMA
CURRENT SCHEMA 特殊レジスターの値を指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、CURRENT SCHEMA 特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 cast-function が BLOB の場合には、長さ属性が 8 バイト以上でなければなりません。
EMPTY_CLOB()、EMPTY_DBCLOB()、または EMPTY_BLOB()
その列のデフォルト値として長さゼロのストリングを指定します。 その列は、この関数の結果データ・タイプに対応するデータ・タイプを持っている必要があります。

指定した値が無効な場合、エラーが戻されます (SQLSTATE 42894)。

生成節 (generated-clause)
列の生成値を指定します。
GENERATED

データベースが列の値を生成することを指定します。 その列が ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列であると見なされる場合、GENERATED を指定する必要があります。 GENERATED として定義された列にはデフォルト節を指定することはできません (SQLSTATE 42623)。

ALWAYS
行が表に挿入されるときや、generation-expression の結果値が変更されるたびに、 必ず、この列に値を生成するように指定します。 この式の結果は、表に保管されます。 データ伝搬、またはアンロードおよび再ロード操作を実行しているのでなければ、 GENERATED ALWAYS の値をお勧めします。 GENERATED ALWAYS は、生成列に必須の値です。
BY DEFAULT
DEFAULT 節を指定して行が挿入または更新されるときに、 明示的に値を指定しないかぎり、データベースが列に値を生成することを指定します。 データ伝搬を使用したり、アンロードおよび再ロードを実行したりするときは、 BY DEFAULT が推奨される値です。

明示的には要求されませんが、値の固有性を確保するために、生成された ID 列には固有の 1 列の索引を定義してください。

AS IDENTITY
列をこの表の ID 列にすることを指定します。 1 つの表には 1 つしか ID 列があってはなりません (SQLSTATE 428C1)。 列に関連付けられたデータ・タイプがゼロの位取りの完全な数値タイプになっているか、 ソース・タイプのユーザー定義特殊タイプがゼロの位取りの完全な数値タイプになっている場合だけ、 IDENTITY キーワードが指定可能です (SQLSTATE 42815)。 ゼロの位取りの SMALLINT、INTEGER、BIGINT、または DECIMAL や、 これらのタイプのうちのいずれかに基づいた特殊タイプは、完全な数値タイプと見なされます。 これに対して、単精度および倍精度の浮動小数点数は、近似数値データ・タイプと見なされます。 参照タイプは、完全な数値タイプで表されていても、ID 列と定義することはできません。

ID 列は暗黙で NOT NULL になります。 ID 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。

START WITH 数値定数
ID 列の最初の値を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし小数点の右側に非ゼロの数字があってはなりません (SQLSTATE 428FA)。 デフォルトは、昇順シーケンスであれば MINVALUE、降順シーケンスであれば MAXVALUE です。 この値は必ずしも、ID 列の最大値または最小値に達した後に循環先となる値とは限りません。 START WITH 節を使用して、循環に使用される範囲外の値の生成を開始することができます。 循環に使用される範囲は、MINVALUE および MAXVALUE によって定義されています。
INCREMENT BY 数値定数
連続した ID 列値のインターバルを指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。これは長精度整数定数の値を超えず (SQLSTATE 42820)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。

この値が負の場合、これは降順シーケンスです。 この値が 0 の場合、または正の場合は、昇順シーケンスになります。 デフォルトは 1 です。

NO MINVALUE または MINVALUE
降順 ID 列が値の生成を循環または停止する最小値、あるいは昇順 ID 列が最大値に達した後に循環する最小値を指定し ます。
NO MINVALUE
昇順シーケンスの場合、値は START WITH 値、または START WITH が指定されなかった場合には 1 です。 降順シーケンスの場合、列のデータ・タイプの最小値になります。 これがデフォルトです。
MINVALUE 数値定数
最小値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最大値以下の値で (SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
NO MAXVALUE または MAXVALUE
昇順 ID 列が値の生成を循環または停止する最大値、あるいは最小値に達した後に 降順 ID 列が循環する最大値を指定します。
NO MAXVALUE
昇順シーケンスの場合、値は列のデータ・タイプの最大値です。 降順シーケンスの場合、値は START WITH 値、または START WITH が指定されなかった場合には -1 です。 これがデフォルトです。
MAXVALUE 数値定数
最大値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最小値以上の値で、(SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
NO CYCLE または CYCLE
その最大値または最小値が生成された後、この ID 列が値の生成を続行するかどうかを指定します。
NO CYCLE
最大値または最小値に達した後は、ID 列の値を生成しないことを指定します。 これがデフォルトです。
CYCLE
最大値または最小値に達した後、この列について値の生成が続行されることを指定します。 このオプションが使用されると、昇順 ID 列が最大値に達した後は、その最小値が生成されます。 降順 ID 列が最小値に達した後は、その最大値が生成されます。 ID 列の最大値および最小値は、循環に使用される範囲を決定します。

CYCLE が有効になっている場合は、1 つの ID 列に対して重複値が生成される可能性があります。 固有値が望ましい場合、明示的には要求されませんが、値の固有性を確保するために、1 列のユニーク索引を生成列で定義する必要があります。 このような ID 列にユニーク索引が存在し、固有ではない値が生成されると、エラーが起こります (SQLSTATE 23505)。

NO CACHE または CACHE
特定の事前割り振り値を、 高速アクセスできるようメモリーに保存するかどうかを指定します。 ID 列に新しい値が必要になったときに、使用できるものがキャッシュにない場合には、新しいキャッシュ・ブロックの最後をログに記録する必要があります。 一方、ID 列に新しい値が必要になったときに未使用の値がキャッシュにある場合は、ロギングの必要がないため、その ID 値を素早く割り振ることができます。 これはパフォーマンスおよびチューニング・オプションです。
NO CACHE
ID 列の値を事前割り振りしないことを指定します。

このオプションが指定されると、ID 列の値はキャッシュに保管されません。 この場合、新しい ID 値が要求されるたびに、ログに対して同期入出力が行われます。

CACHE 整数定数
事前割り振りされ、メモリーに保管される ID シーケンスの値の数を指定します。 ID 列について値が生成される場合、値を事前割り振りしてキャッシュに保管しておくと、 ログへの同期入出力が少なくなります。

ID 列に新しい値が必要になったときに未使用の値がキャッシュにない場合は、値を割り振るためにログへの入出力を待機する必要があります。 一方、ID 列に新しい値が必要になったときに未使用の値がキャッシュにある場合は、ログへの入出力がないので、その ID 値を素早く割り振ることができます。

最小値は 2 です (SQLSTATE 42815)。 デフォルト値は CACHE 20 です。

CACHE オプションと NO ORDER オプションを使用すれば、ID 値を同時に複数のキャッシュに入れることが可能になります。 複数パーティション環境または Db2® pureScale® 環境では、 複数のメンバーがキャッシュに入れることができます。

Db2 pureScale 環境では、CACHE と ORDER の両方が指定されている場合、ORDER の指定は CACHE の指定をオーバーライドし、代わりに NO CACHE が有効になります。

NO ORDER または ORDER
要求の順序で ID 値が生成されるかどうかを指定します。
NO ORDER
要求の順序で値を生成する必要がないことを指定します。 これがデフォルトです。
ORDER
要求の順序で値が生成されることを指定します。
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
列が表のタイム・スタンプ列であることを指定します。 挿入される各行、および任意の列が更新される各行に対して、その列の値が生成されます。 ROW CHANGE TIMESTAMP 列に生成される値は、その行の挿入または更新の時刻に対応するタイム・スタンプです。 1 つのステートメントによって複数の行が挿入または更新される場合、ROW CHANGE TIMESTAMP 列の値は行ごとに異なる可能性があります。

ROW CHANGE TIMESTAMP 列は 1 つの表内に 1 つだけ含めることができます (SQLSTATE 428C1)。 data-type を指定する場合は、TIMESTAMP または TIMESTAMP(6) でなければなりません (SQLSTATE 42842)。 ROW CHANGE TIMESTAMP 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。 ROW CHANGE TIMESTAMP 列には NOT NULL を指定する必要があります (SQLSTATE 42831)。

AS (生成式)
列定義が式に基づくことを指定します。 (GENERATED ALWAYS 列の式にユーザー定義の外部関数が入っている場合に、 その関数の実行可能ファイルを変更する (与えられた引数に対する結果が変わった場合など) と、 データの不整合を生じることがあります。 これを防ぐために、SET INTEGRITY ステートメントを使用して新しい値の生成を強制することができます)。 generation-expression には、以下のいずれも入れることができません (SQLSTATE 42621)。
  • 副照会
  • XMLQUERY 式または XMLEXISTS 式
  • 列関数
  • 間接参照操作または DEREF 関数
  • 非 deterministic であるユーザー定義関数または組み込み関数
  • EXTERNAL ACTION オプションを使用するユーザー定義関数
  • NO SQL を指定して定義されていないユーザー定義関数
  • ホスト変数またはパラメーター・マーカー
  • 特殊レジスターおよび特殊レジスターの値に依存する組み込み関数
  • グローバル変数
  • 列リスト内で後から定義されている列の参照
  • 他の生成列の参照
  • タイプ XML の列の参照

列のデータ・タイプは generation-expression の結果データ・タイプに基づいています。 CAST 指定を使って特定のデータ・タイプを強制的に使用し、 有効範囲を設けることができます (参照タイプの場合のみ)。 data-type を指定すると、適切な割り当て規則に従って、値が列に割り当てられます。 NOT NULL 列オプションが指定されている場合を除き、生成列は NULL 可能と見なされます。 生成列のデータ・タイプと generation-expression の結果のデータ・タイプは、同等性が定義されている必要があります ( 『割り当てと比較』を参照)。 ただし、LOB データ・タイプ、XML、構造化タイプ、およびこれらのいずれかのタイプに基づいた特殊タイプの列と生成式を除きます (SQLSTATE 42962)。

AS ROW BEGIN

これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって生成値が割り当てられます。 この値は、トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメント、またはシステム期間テンポラル表に含まれる行を削除するデータ変更ステートメントのいずれかを最初に実行している間に、時刻機構を読み取ることによって生成されます。

システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連した履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、タイム・スタンプ値が調整される可能性があります。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、データベース構成パラメーターsystime_period_adjYes に設定する必要があります。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。 列は DEFAULT 節を持つことができず (SQLSTATE 42623)、また列は NOT NULL として定義される必要があります (SQLSTATE 42831)。 行開始列は更新できません。

AS ROW END

これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は TIMESTAMP 9999-12-30-00.00.00.000000000000 です。

行終了列が期間 SYSTEM_TIME の 2 番目の列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行終了列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。 列は DEFAULT 節を持つことができず (SQLSTATE 42623)、また列は NOT NULL として定義される必要があります (SQLSTATE 42831)。 行終了列は更新できません。

AS TRANSACTION START ID

これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合には、その列に NULL 値が割り当てられます。 それ以外の場合、この値は、次のいずれかの場合に時刻機構を読み取ることによって生成されます。(1) トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメントを最初に実行するとき。(2) システム期間テンポラル表に含まれる行を削除するとき。 単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。

トランザクション開始 ID 列がシステム期間テンポラル表に必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができるトランザクション開始 ID 列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません。 トランザクション開始 ID 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。 トランザクション開始 ID 列は更新できません。

INLINE LENGTH 整数
このオプションは、構造化タイプ、XML データ・タイプ、または LOB データ・タイプを使って定義された列に対してだけ有効です (SQLSTATE 42842)。

データ・タイプ XML または LOB の列では、integer は、基本表の行に格納する XML 文書または LOB データの内部表記の最大バイト・サイズを指示します。 これより大きな内部表記を持つ XML 文書は、基本表の行とは別に、補助ストレージ・オブジェクト内に格納されます。 これは自動的に行われます。 XML タイプの列には、デフォルト・インライン長はありません。 XML 文書または LOB データが基本表の行にインラインで保管される場合、追加のオーバーヘッドが生じます。 LOB データの場合、オーバーヘッドは 4 バイトです。

データ・タイプ LOB の列の場合、この節が指定されていなければ、デフォルトのインライン長は LOB 記述子の最大サイズに設定されます。 明示的 INLINE LENGTH は、少なくとも LOB 記述子の最大サイズが必要です。 次の表は、LOB 記述子のサイズについて要約しています。
表 1. さまざまな LOB 長に対する LOB 記述子のサイズ
LOB の最大長 (バイト単位) 明示的 INLINE LENGTH の最小値
1,024 68
8,192 92
65,536 116
524,000 140
4,190,000 164
134,000,000 196
536,000,000 220
1,070,000,000 252
1,470,000,000 276
2,147,483,647 312
構造化タイプの列では、integer は、行内の残りの値とともにインラインで保管する構造化タイプのインスタンスの最大サイズをバイト単位で指示します。 インラインで保管できない構造化タイプのインスタンスは、LOB 値が処理されるのに似た方法で、基本表の行とは別に保管されます。 これは自動的に行われます。 構造化タイプ列のデフォルトの INLINE LENGTH は、 このタイプのインライン長になります (明示的に指定するか、 または CREATE TYPE ステートメント内のデフォルトとして)。 構造化タイプの INLINE LENGTH が 292 未満の場合、列の INLINE LENGTH には値 292 が使われます。
注: サブタイプのインライン長は、デフォルトのインライン長にはカウントされません。つまり、既存のサブタイプと将来のサブタイプを考慮して CREATE TABLE 時に明示的に INLINE LENGTH を指定しないと、サブタイプのインスタンスがインラインに適合しない可能性があります。

明示的 INLINE LENGTH 値は、32 673 を超えてはなりません。 構造化タイプまたは XML データ・タイプの場合、少なくとも 292 でなければなりません (SQLSTATE 54010)。

COMPRESS SYSTEM DEFAULT
システム・デフォルト値が、最小限のスペースを使用して保管されるように指定します。 VALUE COMPRESSION 節が指定されていない場合には警告が出され (SQLSTATE 01648)、 システム・デフォルト値が最小限のスペースを使用して保管されるようにはなりません。

システム・デフォルト値がこのような方法で保管されると、 列に対する挿入や更新操作の際に余分な検査が行われるために、 若干パフォーマンスが低下します。

基本データ・タイプは、DATE、TIME、TIMESTAMP、XML、または構造化データ・タイプであってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。

security-label-name で保護された列
表に関連するセキュリティー・ポリシーに対応して存在するセキュリティー・ラベルを識別します。 名前は非修飾でなければなりません (SQLSTATE 42601)。 表にはセキュリティー・ポリシーが関連付けられている必要があります (SQLSTATE 55064)。 表はシステム期間テンポラル表であってはなりません。

一般的に、現在の LBAC 信用証明情報ではデータへの書き込みを許可されないような方法でそのデータを保護することはできません。 特定のセキュリティー・ラベルで列を保護するには、そのセキュリティー・ラベルで保護するデータへの書き込みを許可する LBAC 信用証明情報を持っている必要があります。 SECADM 権限は不要です。

期間定義 (period-definition)
PERIOD
表の期間を定義します。
SYSTEM_TIME (begin-column-nameend-column-name)

システム期間を SYSTEM_TIME という名前で定義します。 表に SYSTEM_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる SYSTEM_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-name は ROW BEGIN として定義する必要があり、end-column-name は ROW END として定義する必要があります (SQLSTATE 428HN)。

BUSINESS_TIME (begin-column-nameend-column-name)

アプリケーション期間を BUSINESS_TIME という名前で定義します。 表に BUSINESS_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる BUSINESS_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-nameend-column-name は、両方とも DATE または TIMESTAMP(p) (p は 0 から 12 までの範囲) として定義する必要があり (SQLSTATE 42842)、列は NOT NULL として定義する必要があります (SQLSTATE 42831)。 begin-column-name および end-column-name は、GENERATED 節で定義された列を指定することはできません (SQLSTATE 428HZ)。

end-column-name の値が begin-column-name の値より大きくなるように、暗黙的なチェック制約が生成されます。 暗黙的に作成されるチェック制約の名前は DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME で、ステートメントで指定された他のチェック制約の名前にすることはできません (SQLSTATE 42710)。

固有制約 (unique-constraint)
ユニーク制約または主キー制約を定義します。 表に分散キーがある場合、 ユニーク・キーまたは主キーは分散キーのスーパーセットである必要があります。 副表である表では、 ユニーク制約または主キー制約を指定することはできません (SQLSTATE 429B3)。 主キーまたはユニーク・キーは、ディメンションのサブセットにはなりません (SQLSTATE 429BE)。 表がルート表である場合、表とそのすべての副表に対して制約が適用されます。
CONSTRAINT 制約名
主キー制約、またはユニーク制約の名前を指定します。
UNIQUE (column-name,...)
指定した列で構成されるユニーク・キーを定義します。 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。
表に期間 BUSINESS_TIME が定義されている場合、BUSINESS_TIME WITHOUT OVERLAPS は、キー式リストの最後の項目として指定できます。 BUSINESS_TIME WITHOUT OVERLAPS を指定する場合、リストには column-name が少なくとも 1 つは含まれていなければなりません。 WITHOUT OVERLAPS は、その他の指定キーの値が、期間 BUSINESS_TIME の時間においてユニークになることを示します。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の列を制約の一部として指定することはできません (SQLSTATE 428HW)。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、以下の属性が制約に追加されます。
  • BUSINESS_TIME 期間の終了列 (昇順)
  • BUSINESS_TIME 期間の開始列 (昇順)

指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 保管される列の長さについては、 バイト・カウントを参照してください。 キーの長さの制限については、 『SQL の制限』を参照してください。 列の長さ属性がページ・サイズに対応する索引キー長制限値の範囲内に収まる場合でも、LOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプは、ユニーク・キーの一部として使用できません (SQLSTATE 54008)。

ユニーク・キーの列セットは、主キーまたは他のユニーク・キーの列セットと同じにすることはできません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891)

表が副表である場合、ユニーク制約はスーパー表から継承されるので、ユニーク制約を指定することはできません (SQLSTATE 429B3)。

カタログに記録されている表の記述には、ユニーク・キー、および強制適用された場合のそのユニーク索引が含まれます。 強制適用された場合、順方向と逆方向のスキャンが可能な双方向のユニーク索引が、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。 索引の名前は、作成している表が属しているスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。

PRIMARY KEY (column-name, ...)
指定された列で構成される主キーを定義します。 この節を複数回指定することはできず、 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定していなければなりません。 また、同じ列を複数回指定することはできません。
表に期間 BUSINESS_TIME が定義されている場合、BUSINESS_TIME WITHOUT OVERLAPS は、キー式リストの最後の項目として指定できます。 BUSINESS_TIME WITHOUT OVERLAPS を指定する場合、リストには column-name が少なくとも 1 つは含まれていなければなりません。 WITHOUT OVERLAPS は、残りの指定キーの値が、期間 BUSINESS_TIME の時間においてユニークになることを示します。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の列を制約の一部として指定することはできません (SQLSTATE 428HW)。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、以下の属性が制約に追加されます。
  • BUSINESS_TIME 期間の終了列 (昇順)
  • BUSINESS_TIME 期間の開始列 (昇順)

指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 保管される列の長さについては、 バイト・カウントを参照してください。 キーの長さの制限については、 『SQL の制限』を参照してください。 列の長さ属性がページ・サイズに対応する索引キー長制限値の範囲内に収まる場合でも、LOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプは、主キーの一部として使用できません (SQLSTATE 54008)。

主キーの列セットは、ユニーク・キーの列セットと同じであってはなりません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891)

1 つの表には、主キーを 1 つだけ定義することができます。

表が副表である場合、主キーはスーパー表から継承されるので、 主キーを指定することはできません (SQLSTATE 429B3)。

カタログに記録されている表の記述には、主キー、および強制適用された場合のその 1 次索引が含まれます。 強制適用された場合、順方向と逆方向のスキャンが可能な双方向のユニーク索引が、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。 索引の名前は、作成している表が属しているスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。

DISTRIBUTE BY HASH 節を使用して明示的に分散キーを定義する場合、unique-constraint (ユニーク制約) の列は分散キー列のスーパーセットである必要があります。 列の順序は重要ではありません。 分散キーが暗黙のうちに定義されている場合、それらはユニーク制約の定義に基づいて選択されます。 分散キーの暗黙選択は、以下の場合に発生します。
  • DISTRIBUTE BY HASH 節を省略し、複数のパーティションが存在するデータベース・パーティション・グループに属するものとして表が定義されている場合。
  • DISTRIBUTE BY RANDOM 節が使用されている場合。
参照制約
参照制約を定義します。
CONSTRAINT 制約名
参照制約の名前を指定します。
FOREIGN KEY (column-name, ...)
指定した constraint-name (制約名) の参照制約を定義します。

T1 を、ステートメントの対象となる表であると想定します。 参照制約の外部キーは、指定された列で構成されます。 列名リストの各名前は、T1 の列を指定していなければならず、 同じ列を複数回指定することはできません。

指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 保管される列の長さについては、 バイト・カウントを参照してください。 キーの長さの制限については、 『SQL の制限』を参照してください。 LOB、XML、これらのタイプのうちのいずれかに基づく特殊タイプ、または構造化タイプの列を、外部キーの一部として使用することはできません (SQLSTATE 42962)。 外部キーの列の数は、親キーの列の数と同じでなければならず、 対応する列のデータ・タイプは互換性があることが必要です (SQLSTATE 42830)。 2 つの列の記述は、それらの列が互換性のあるデータ・タイプ (両方の列が数字、文字ストリング、GRAPHIC、日付 / 時間であるか、または同じ特殊タイプ) であれば互換性があります。

参照節
参照制約の親表または親ニックネーム、および親キーを指定します。
REFERENCES parent-table-name または nickname
REFERENCE 節に指定される表またはニックネームは、カタログに記述された基本表またはニックネームを識別している必要がありますが、カタログ表を示すものであってはなりません。

参照制約の外部キー、親キー、および親表または親ニックネームが、 以前に指定した参照制約の外部キー、親キー、および親表または親ニックネームと同じである場合、 参照制約は重複しています。 重複した参照制約は無視され、警告が戻されます (SQLSTATE 01543)。

以下の説明では、T2 は指定した親表を示し、T1 は作成する (または変更する) 表を示します。 (T1 と T2 は同じ表にすることもできます)。

指定された外部キーの列の数は、T2 の親キーと同じ数でなければなりません。 また、外部キーの n 番目の列の記述は、 その親キーの n 番目の列の記述と互換性がなければなりません。 この規則において、日時の列はストリング列と互換性があるとは見なされません。
(column-name,...)
参照制約の親キーは、指定された列で構成されます。 各 column-name は、T2 の列を指定する非修飾名でなければなりません。 同じ列を複数回指定することはできません。

列名のリストは、 主キーまたは T2 に存在するユニーク制約の列セットと一致している (順序は任意) 必要があります (SQLSTATE 42890)。 列名のリストの指定がない場合、T2 に主キーがある必要があります (SQLSTATE 42888)。 列名リストを省略すると、指定されているとおりの順序でその主キーの列が暗黙に指定されます。

FOREIGN KEY 節で指定される参照制約は、T2 が親であり、T1 が従属であるリレーションシップを定義します。

規則節 (rule-clause)
従属表に対するアクションを指定します。
ON DELETE
親表の行が削除された場合、従属表でどのようなアクションを行うかを指定します。 次の 4 つのアクションがあります。
  • NO ACTION (デフォルト値)
  • RESTRICT
  • CASCADE
  • SET NULL
削除規則は、T2 の行が DELETE または伝搬による削除操作の対象であり、 その行の従属行が T1 にある場合に、適用されます。 p は、T2 のそのような行を表すと想定します。
  • RESTRICT または NO ACTION を指定すると、エラーになり、行は削除されません。
  • CASCADE を指定すると、 T1 の p の従属行に削除操作が伝搬します。
  • SET NULL が指定された場合、 T1 にある、p の各従属行の外部キーで、NULL 可能な列が NULL 値に設定されます。

SET NULL は、外部キーの列に NULL 可能な列がない限り指定してはなりません。 この節を省略すると、暗黙に ON DELETE NO ACTION が指定されます。

T1 が複数のパスで T2 に連結削除されている場合は、 重複する外部キー定義を使用して 2 つの SET NULL 規則を定義することはできません。 例えば、T1 (i1, i2, i3) という場合、 Rule1 に外部キー (i1, i2) を使用し、Rule2 に外部キー (i2, i3) を使用するということはできません。

規則の適用順序は次のとおりです。
  1. RESTRICT
  2. SET NULL または CASCADE
  3. NO ACTION

T1 の任意の行が 2 つの異なる規則によって影響される場合、エラーとなり行は削除されません。

複数の表が関係し、 削除規則の 1 つが RESTRICT または SET NULL になっている循環によって表が自身を連結削除するような参照制約は定義できません (SQLSTATE 42915)。

複数のパスによって表が自身や他の表を連結削除する参照制約は、 以下の場合を除き、定義できます (SQLSTATE 42915)。

  • 表は、CASCADE リレーションシップ (自己参照、または別の表を参照)、 および削除規則が RESTRICT または SET NULL の自己参照リレーションシップのいずれの従属表であってもなりません。
  • あるキーに含まれる列のうち少なくとも 1 つが他のキーに含まれ、他のキーとオーバーラップしているキーがある場合。 表が、外部キーがオーバーラップする複数のリレーションシップを通して別の表に連結削除される場合は、 それらのリレーションシップの間で削除規則が一致していなければなりません。 また、いずれの削除規則も SET NULL になっていてはなりません。
  • 表と別の表の間に複数のリレーションシップに基づく連結削除が設定されており、それらのリレーションシップのうち、少なくとも 1 つに SET NULL の削除規則が指定されている場合、それらのリレーションシップの外部キー定義に分散キー列またはマルチディメンション・クラスタリング (MDC) キー列が含まれていてはなりません。
  • CASCADE リレーションシップを通して 2 つの表が同じ表に連結削除されている場合、 各連結削除パスの最後のリレーションシップの削除規則が RESTRICT または SET NULL であるときは、 2 つの表を相互に連結削除することはできません。

T1 の何らかの行が別の削除規則の影響を受ける場合、結果は、これらの規則で指定されたすべてのアクションの影響を受けます。 すべてのアクションの影響は、T1 の AFTER トリガーと CHECK 制約からも認識されます。 例えば、上位の表へのある連結削除パスによって NULL 設定されるターゲットになっていて、 同じ上位の表への 2 番目の連結削除パスによって削除されるターゲットになっている行があるとします。 この場合、結果として行は削除されます。 この派生表では、AFTER DELETE トリガーはアクティブ化されますが、 AFTER UPDATE トリガーはアクティブ化されません。

親表または従属表が型付き表階層のメンバーである参照制約に対して、上記の規則を適用する場合、各階層内のすべての表に対して適用されるすべての参照制約が考慮されます。

ON UPDATE
親表の行が更新された場合に従属表に対して行うアクションを指定します。 この節はオプションです。 ON UPDATE NO ACTION はデフォルト値であり、 ON UPDATE RESTRICT はそれに代わって指定できる唯一のものです。

NO ACTION と RESTRICT の違いについては、 のセクションで説明しています。

チェック制約
チェック制約を定義します。 check-constraint (チェック制約) は、 偽以外に評価されなければならない search-condition (検索条件)または列間に定義された機能従属関係です。
CONSTRAINT 制約名
チェック制約の名前を指定します。
CHECK (チェック条件)
チェック制約を定義します。 search-condition は、表のすべての行について、真または不明でなければなりません。
検索条件
search-condition には、以下の制限があります。
  • 列参照は、作成する表の列に対するものでなければなりません。
  • search-condition に TYPE 述部を入れることはできません。
  • search-condition には、以下のいずれも入れることができません (SQLSTATE 42621)。
    • 副照会
    • XMLQUERY 式または XMLEXISTS 式
    • 有効範囲を持つ参照引数がオブジェクト ID (OID) 列以外の列である、間接参照操作または DEREF 関数
    • SCOPE 節を持つ CAST 指定
    • 列関数
    • deterministic 関数でない関数
    • 外部アクションを持つと定義された関数
    • MODIFIES SQL または READS SQL DATA のいずれかによって定義されたユーザー定義関数
    • ホスト変数
    • パラメーター・マーカー
    • シーケンス参照
    • OLAP 指定
    • 特殊レジスターおよび特殊レジスターの値に依存する組み込み関数
    • グローバル変数
    • ID 列以外の生成列の参照
    • タイプ XML の列の参照 (VALIDATED 述部の中以外)
    • エラー・トレラントな nested-table-expression
機能依存関係 (functional-dependency)
列間の機能従属関係を定義します。
column-name DETERMINED BY column-name または (column-name, ...) DETERMINED BY (column-name, ...)
列の親セットには、DETERMINED BY 節の直前に来る指定された列が含まれます。 列の子セットには、DETERMINED BY 節の直後に来る指定された列が含まれます。 search-condition の制約事項すべては、親セット列と子セット列に適用され、 列のセットには単純な列参照のみが許可されています (SQLSTATE 42621)。 機能従属関係に同じ列を複数回指定することはできません (SQLSTATE 42709)。 列のデータ・タイプを LOB データ・タイプ、LOB データ・タイプに基づく特殊タイプ、XML データ・タイプ、構造化タイプにすることはできません (SQLSTATE 42962)。 ROW CHANGE TIMESTAMP 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。 列の子セットの列を NULL 可能列にすることはできません (SQLSTATE 42621)。

column-definition の一部としてチェック制約を指定する場合、 その同じ列に対してのみ列参照を行うことができます。 表定義の一部として指定されたチェック制約には、それ以前に CREATE TABLE ステートメントで定義されている列を指定する列参照を含めることができます。 チェック制約の矛盾、重複条件、または同等条件については検査されません。 したがって、矛盾したチェック制約や冗長なチェック制約が定義可能であるため、 実行時にエラーになる可能性があります。

search-condition IS NOT NULL は指定できますが、列の NOT NULL 属性を使用して、NULL 可能性を直接適用することをお勧めします。 例えば、CHECK (salary + bonus > 30000)は、給与が NULL に設定されている場合に受け入れられます。これは、CHECK 制約が満たされているか不明である必要があり、この場合は給与が不明であるためです。 ただし、給与が NULL に設定されている場合、 CHECK (salary IS NOT NULL)は false と見なされ、制約違反と見なされます。

チェック制約 検索条件 での は、表内の行が挿入または更新されるときに適用されます。 表で定義されるチェック制約は、その表の副表すべてに自動的に適用されます。

挿入、更新、削除、整合性設定などの通常の操作中には、 データベース・マネージャーによって機能従属関係が課せられません。 機能従属関係は、照会の最適化のための照会再書き込みで使用される場合があります。 機能従属関係の整合性が維持されないと、正しくない結果が戻される可能性があります。

制約属性
主キー制約、ユニーク制約、参照整合性制約、またはチェック制約に関連付ける属性を定義します。
ENFORCED または NOT ENFORCED
挿入、更新、削除などの通常の操作中に、 データベース・マネージャーによって制約が課せられるかどうかを指定します。 デフォルトは、 ddl_constraint_def構成パラメーターの設定によって決まります。 デフォルトの動作は、ENFORCED または NOT ENFORCED を明示的に指定してオーバーライドすることができます。
ENFORCED
データベース・マネージャーによって制約が課せられます。 ENFORCED は、以下の状況では指定できません。
  • 機能従属関係の場合 (SQLSTATE 42621)
  • 参照制約がニックネームを参照している場合 (SQLSTATE 428G7)
NOT ENFORCED
データベース・マネージャーによって制約が課せられません。 主キー制約またはユニーク制約は、従属する ENFORCED 参照制約が存在する場合、NOT ENFORCED にすることはできません。
TRUSTED
データは、制約に適合しているものとして信頼できます。 TRUSTED は、表のデータが個別に制約に適合していることが分かっている場合のみに使用してください。 データが制約に適合していない場合、照会結果が予測不能になる可能性があります。 これはデフォルト・オプションです。
インフォメーショナル制約は、どのような場合でも違反すべきではありません。 インフォメーショナル制約は、照会の最適化において、および REFRESH IMMEDIATE MQT とステージング表の増分処理において使用されます。 制約に違反している場合、これらの処理によって予測不能な結果が生成されたり、正しくない MQT およびステージング表の内容が生成されたりすることがあります。 例えば、親子関係にある表が保守される順序は重要です。 親子関係にある表に行を挿入する場合、まず最初に親表に行を挿入する必要があります。 親子関係にある表から行を削除するには、まず最初に子表から行を削除する必要があります。 これにより、子表に孤立行が存在することがないようにします。 インフォメーショナル制約に違反している場合、従属 MQT データとステージング表データの増分保守は、その違反しているインフォメーショナル制約に基づいて最適化される可能性があり、正しくないデータが生成されることがあります。
NOT TRUSTED
データは、制約に適合しているものとして信頼することはできません。 NOT TRUSTED の使用目的としては、データがほとんどの行では制約に適合しているものの、すべての行または将来追加される行が制約に適合することは個別には認識されない場合のためのものです。 制約が NOT TRUSTED で、照会最適化においてこれが有効になっている場合、その制約に完全に適合するデータに依存するような最適化は実行されません。 NOT TRUSTED は、参照整合性制約のみにしか指定できません (SQLSTATE 42613)。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
適切な状況下で、照会の最適化のために、 制約または機能従属関係を使用できるかどうかを指定します。 デフォルトは ENABLE QUERY OPTIMIZATION です。
ENABLE QUERY OPTIMIZATION
制約が真であると想定され、照会の最適化に使用できます。
DISABLE QUERY OPTIMIZATION
制約を照会の最適化に使用できません。 DISABLE QUERY OPTIMIZATION は、主キー制約とユニーク制約に指定することはできません (SQLSTATE 42613)。
OF type-name1
表の列が type-name1 で指定される構造化タイプの属性に基づいていることを指定します。 type-name1 の指定にスキーマ名が含まれていない場合、 そのタイプ名は SQL パス上のスキーマを探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH プリプロセス・オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。 このタイプ名は、既存のユーザー定義タイプ名である (SQLSTATE 42704) 必要があり、 また、少なくとも 1 つの属性があって (SQLSTATE 42997)、 しかもインスタンス化可能な構造化タイプでなければなりません (SQLSTATE 428DP)。

UNDER が指定されていない場合には、 オブジェクト ID 列を指定する必要があります (OID-column-definition を参照)。 このオブジェクト ID 列は、その表の最初の列になります。 オブジェクト ID 列の後に、type-name1 の属性に基づく列が続きます。

HIERARCHY 階層名
表階層に関連する階層表の名前を指定します。 これは、階層のルート表と同時に作成されます。 型付き表階層に含まれる副表すべてのデータは、この階層表に保管されます。 階層表を SQL ステートメントで直接に参照することはできません。 hierarchy-nametable-name になります。 暗黙または明示のスキーマ名の入った hierarchy-name は、 カタログに記述されている表、ニックネーム、ビュー、または別名を指定するものであってはなりません。 スキーマ名を指定する場合、作成する表のスキーマ名と同じにする必要があります (SQLSTATE 428DQ)。 ルート表の定義時にこの節が省略されると、システムによって名前が生成されます。 この名前は、作成する表の名前とその後のユニークな接尾部で構成され、既存の表、ビュー、およびニックネームの ID の中で固有な ID です。
UNDER スーパーテーブル名
表が supertable-name の副表であることを指定します。 スーパー表は既存の表でなければならず (SQLSTATE 42704)、 かつ表は type-name1 のすぐ上のスーパータイプである構造化タイプを使用して 定義しなければなりません (SQLSTATE 428DB)。 table-namesupertable-name のスキーマ名は、 同じでなければなりません (SQLSTATE 428DQ)。 supertable-name で指定する表に、type-name1 を使用する副表が既に定義されていてはなりません (SQLSTATE 42742)。

表の列には、スーパー表のオブジェクト ID 列が含まれています。 この列のタイプは、REF(type-name1) に変更されており、 type-name1 の属性に基づく列が続きます (ここでいうタイプには、 スーパータイプの属性も含まれていることを念頭に置いてください)。 属性名は OID 列名と同じものにすることはできません (SQLSTATE 42711)。

表スペースやデータ・キャプチャーなど、その他の表オプションは、初期状態ではログに記録されません。また、分散キー・オプションは指定できません。 これらのオプションはスーパー表から継承されます (SQLSTATE 42613)。

INHERIT SELECT PRIVILEGES
スーパー表に対して SELECT 特権を保持するユーザーやグループはすべて、新しく作成した副表に対しても同様の特権を付与されます。 この特権は、副表定義者によって付与されたものと見なされます。
型付きエレメント・リスト
型付き表の追加エレメントを定義します。 これには、列の追加オプション、オブジェクト ID 列 (ルート表のみ) の追加、 表の制約事項などが含まれます。
OID 列の定義
型付き表のオブジェクト ID 列を定義します。
REF IS OID-column-name ユーザー生成
オブジェクト ID 列 (OID) を表の最初の列として定義することを指定します。 表階層のルート表では、OID が必須です (SQLSTATE 428DX)。 この表は副表以外の型付き表 (OF 節が必須) でなければなりません (SQLSTATE 42613)。 この列の名前は OID-column-name として定義されますが、 構造化タイプ type-name1 のどの属性の名前とも同一にすることはできません (SQLSTATE 42711)。 さらに、この列はタイプ REF (type-name1), NOT NULL で定義され、 システム必須のユニーク索引 (デフォルトの索引名) が生成されます。 この列はオブジェクト ID 列 または OID 列 として参照されます。 USER GENERATED というキーワードは、 行を挿入する際にユーザーが OID 列の初期値を提供しなければならないことを指しています。 行を挿入した後は、OID 列を更新することはできません (SQLSTATE 42808)。
オプション付き
型付き表の列に適用される追加オプションを定義します。
column-name
追加オプションを指定する列の名前を指定します。 column-name (列名) は、 スーパー表の列ではない表の列の名前に対応していなければなりません (SQLSTATE 428DJ)。 列名は、ステートメント内の 1 つの WITH OPTIONS 節に 1 回だけしか指定できません (SQLSTATE 42613)。

タイプ定義 (CREATE TYPE) の一部としてオプションが既に指定されている場合には、 ここで指定されているオプションは CREATE TYPE のオプションをオーバーライドします。

WITH OPTIONS 列オプション
指定した列にオプションを定義します。 前述の column-options を参照してください。 表が副表である場合、主キーまたはユニーク制約を指定することはできません (SQLSTATE 429B3)。
LIKE table-name1 または view-name または nickname
表の列の名前と記述が、指定された表 (table-name1)、ビュー (view-name)、またはニックネーム (nickname) の列と同じであることを指定します。 指定された表、ビュー、またはニックネームは、カタログ内にあるか、宣言済み一時表でなければなりません。 型付き表または型付きビューを指定することはできません (SQLSTATE 428EC)。
LIKE を使用すると、n 列が暗黙的に定義されます。n は、 指定した表、ビューまたはニックネームにおける列数です (指定した表では暗黙的な隠し列を含む)。 既存の表の暗黙的な隠し列に対応する新規表の列も、暗黙的な隠し列と定義されます。 暗黙的な定義は、以下に示すように LIKE の後に何が指定されるかによって左右されます。
  • 表が指定されると、暗黙的な定義には、その表のそれぞれの列の列名、データ・タイプ、非表示属性、および NULL 可能特性が設定されます。 EXCLUDING COLUMN DEFAULTS を指定しないと、列のデフォルト値も入ります。
  • ビューが指定されると、暗黙的な定義には、そのビューに定義した全選択のそれぞれの結果列の列名、データ・タイプ、および NULL 可能特性が設定されます。 ビュー列のデータ・タイプは、表の列に対して有効なデータ・タイプである必要があります。
  • ニックネームが指定されると、暗黙的な定義には、そのニックネームのそれぞれの列の列名、データ・タイプ、および NULL 可能特性が設定されます。
  • 保護対象表を指定すると、新しい表は、その指定した表と同じセキュリティー・ポリシーと保護対象列を継承します。
  • 表が指定されていて、その表に行開始列、行終了列、またはトランザクション開始 ID 列が含まれている場合、新しい表の対応する列はソース列のデータ・タイプのみを継承します。 新規列は生成列とは見なされません。
  • 期間が含まれる表が指定されると、新しい表は期間定義を継承しません。
  • システム期間テンポラル表が指定される場合、新しい表はシステム期間テンポラル表ではありません。
  • random by generation 方式を使用するランダム分散表が指定され、作成される新しい表が同じ表分散を共有しない場合、ランダム分散値の生成に使用される RANDOM_DISTRIBUTION_KEY列は含まれません。

copy-attributes 節に基づいて、列のデフォルトと ID 列属性を組み込んだり除外したりすることができます。 さらにこの暗黙的な定義には、指定した表、ビュー、またはニックネームの他の属性は含まれません。 したがって、新しい表には、主キー、ユニーク制約、外部キー制約、参照整合性制約、トリガー、索引、ORGANIZE BY 指定、PARTITIONING KEY 指定はいずれもありません。 表は IN 節で暗黙的にまたは明示的に指定した表スペースの中に作成されます。 また、任意指定の他の節を指定した場合に限り、この表にその任意指定の節が含まれます。

表が LIKE 節内で定義されていて、その表に ROW CHANGE TIMESTAMP 列が含まれている場合、新規表の対応する列は ROW CHANGE TIMESTAMP 列のデータ・タイプのみを継承します。 新規列は生成列とは見なされません。

表が指定される場合、その表の行レベルまたは列レベルのアクセス制御がアクティブになると、これは新しい表で継承されません。

コピー・オプション
これらのオプションでは、 ソースの結果表定義 (表、ビュー、または全選択) から付加的な属性をコピーするかどうかを指定します。
INCLUDING COLUMN DEFAULTS
ソース結果表の定義の更新可能な各列の列デフォルトをコピーします。 更新可能でない列では、作成される表の対応列にデフォルトが定義されないことになります。

LIKE table-name が指定され、 しかも table-name が基本表、作成済み一時表、または宣言済み一時表を示す場合、 INCLUDING COLUMN DEFAULTS がデフォルトになります。 LIKE table-name が指定され、しかも table-name がニックネームを示す場合、INCLUDING COLUMN DEFAULTS は無効で、列のデフォルトはコピーされません。

EXCLUDING COLUMN DEFAULTS
ソース結果表の定義から列デフォルトはコピーされません。

この節がデフォルトです。ただし、LIKE table-name が指定され、 かつ table-name が基本表、作成済み一時表、または宣言済み一時表を示す場合を除きます。

INCLUDING IDENTITY COLUMN ATTRIBUTES
可能であれば、ソース結果表の定義から ID 列属性がコピーされます。 ID 列属性をコピーできるのは、表、ビュー、または全選択内の対応する列のエレメントが、 識別特性を持つ基本表列名に直接または間接にマップされる表列の名前またはビュー列の名前である場合です。 これら以外の場合はすべて、新規表の列には識別特性は備わりません。 以下に例を示します。
  • 全選択の選択リストに ID 列の名前のインスタンスが複数含まれている (つまり、同じ列を複数回選択している) 場合
  • 全選択の選択リストに複数の ID 列が含まれている (つまり、結合が関与している) 場合
  • ID 列が選択リスト内の式に組み込まれている場合
  • 全選択にセット演算 (UNION (合併)、EXCEPT (差)、または INTERSECT (論理積)) が含まれている場合
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ソース結果表の定義から ID 列属性はコピーされません。
as-result-table
column-name
表の列の名前を指定します。 列名のリストを指定する場合、リスト中の列の名前の数は、 fullselect の結果表の列の数と同じ数でなければなりません。 各 column-name (列名) は、固有、しかも非修飾でなければなりません。 列名のリストの指定がない場合、表の列は、fullselect の結果表の列名を継承します。

全選択の結果表に、無名列の重複列名がある場合には、 列名のリストを指定する必要があります (SQLSTATE 42908)。 無名列とは、定数、関数、式、またはセット演算から派生した列で、選択リストの AS 節によって名前が指定されていない列を指します。

AS (全選択)
fullselect から得られる結果表の列ごとに、対応する表の列を定義することを指定します。 定義する各列には、結果表の対応列から以下の属性が取り込まれます (各データ・タイプに該当する場合)。
  • 列名
  • 列の説明
  • データ・タイプ、長さ、精度、および位取り
  • NULL 可能
以下の属性は取り込まれません (ただし、デフォルト値と識別属性は、copy-options を使用して取り込むことができます)。
  • デフォルト値
  • 識別属性
  • 非表示属性
  • ROW CHANGE TIMESTAMP
  • 全選択で参照されている表やビューの他の任意指定の属性
以下の制約事項が適用されます。
  • 選択リストの各エレメントの名前は、それぞれユニークなものでなければなりません (SQLSTATE 42711)。 SELECT 節で AS 節を使用すると、それぞれのエレメントにユニークな名前を付けることができます。
  • fullselect でホスト変数を参照したり、パラメーター・マーカーを組み込んだりすることはできません。
  • fullselect の結果列のデータ・タイプは、表の列に対して有効なデータ・タイプでなければなりません。
  • fullselect で指定した表の行レベルまたは列レベルのアクセス制御 (RCAC) をアクティブにしても、RCAC は新しい表にカスケードされません。
  • fullselectdata-change-table-reference 節を組み込むことはできません (SQLSTATE 428FL)。
  • 型付き表または型付きビューを参照しない有効な fullselect を指定することができます。
WITH NO DATA | WITH DATA
表の列にデータを取り込むかどうかを指定します。
WITH NO DATA
fullselect を実行しません。 表の定義に使用するだけで、照会の結果は表に取り込みません。
WITH DATA
fullselect を実行して、照会の結果を表に取り込みます。
マテリアライズ照会定義 (materialized-query-definition)
column-name
表の列の名前を指定します。 列名のリストを指定する場合、リスト中の列の名前の数は、 全選択の結果表の列の数と同じ数でなければなりません。 各 column-name (列名) は、固有、しかも非修飾でなければなりません。 列名のリストの指定がない場合、表の列は、全選択の結果表の列名を継承します。

fullselect の結果表に、無名列の重複列名がある場合には、 列名のリストを指定する必要があります (SQLSTATE 42908)。 無名列とは、定数、関数、式、またはセット演算から派生した列で、選択リストの AS 節によって名前が指定されていない列を指します。

MAINTAINED BY REPLICATION を指定する場合、列リスト内の列名は、fullselect で指定した表の列の名前と一致しなければなりません。

AS
表の定義に使用され、表に含まれるデータを判別する照会をこの後に指定します。
全選択
表の基礎となる照会を定義します。 作成される列定義は、同じ照会で定義したビューの定義と同じになります。 全選択で参照される基本表の暗黙的な隠し列に対応する新規表の列は、新規表では隠し列とは見なされません。

各選択リスト・エレメントには名前が必要です (式には AS 節を使用します)。 materialized-query-definition は、マテリアライズ照会表の属性を定義します。 選択されたオプションは、後述するように全選択の内容も定義します。

全選択に data-change-table-reference 節を組み込むことはできません (SQLSTATE 428FL)。また、fetch-clause または ORDER BY 節を組み込むこともできません (SQLSTATE 428FJ)。

REFRESH DEFERRED または REFRESH IMMEDIATE が指定されていると、 全選択で次のものを指定できません (SQLSTATE 428EC)。
  • 任意の FROM 節での、マテリアライズ照会表、作成済み一時表、宣言済み一時表、または型付き表への参照
  • ビューの全選択が、マテリアライズ照会表の全選択に関してリストされたいずれかの制限に違反する場合の、 そのビューへの参照
  • 参照タイプ (またはそのタイプに基づく特殊タイプ) である式
  • 次のいずれかの属性を持つ関数:
    • EXTERNAL ACTION
    • LANGUAGE SQL
    • CONTAINS SQL
    • READS SQL DATA
    • MODIFIES SQL DATA
  • NOT SECURED 関数 (NOT SECURED 関数がマテリアライズ照会表を参照し、 そのマテリアライズ照会表が、行または列のアクセス制御がアクティブな表を参照する場合)。
  • 物理的特性に依存する関数 (例えば、DBPARTITIONNUM、HASHEDVALUE、RID_BIT、RID)
  • ROW CHANGE 式または行の ROW CHANGE TIMESTAMP 列の参照
  • システム・オブジェクトに対する表またはビュー参照 (Explain 表も指定できません)
  • 構造化タイプ、LOB タイプ (または LOB タイプに基づく特殊タイプ)、または XML タイプである式
  • 保護対象表または保護対象ニックネームの参照
DISTRIBUTE BY REPLICATION を指定する場合、以下の制限が適用されます。
  • GROUP BY 節は許可されていません。
  • マテリアライズ照会表は単一の表だけを参照できます。 すなわち、結合を組み込むことはできません。
MAINTAINED BY REPLICATION を指定する場合は、以下の制限が適用されます。
  • 照会は、SELECT 節と FROM 節だけからなる副選択でなければなりません。
  • FROM 節は、既存のシャドー表定義で指定されていない単一の行オーガナイズ表を参照しなければなりません。
  • 範囲パーティション表、マルチディメンション・クラスタリング表、範囲がクラスター化された表、テンポラル表、および LONG VARCHAR 列または LONG VARGRAPHIC 列を含んだ表を、参照される表にすることはできません。
  • 参照される表を、行および列のアクセス制御 (RCAC) またはラベル・ベースのアクセス制御 (LBAC) で保護することはできません。
  • 選択リストに含めることができるのは、データ・タイプがカラム・オーガナイズ表でサポートされる表の列への直接参照のみです。 式を使用することはできません。
  • 選択リストで指定した列を、選択リスト内の AS 節や、列名リストを使用して名前変更することはできません。
  • 参照される表には、強制適用される主キー制約またはユニーク制約が少なくとも 1 つなければなりません。また、選択リストで指定した列には、これらの制約の少なくとも 1 つにおけるすべてのキー列が含まれていなければなりません。
REFRESH IMMEDIATE は、以下の場合に指定されます。
  • 照会は副選択でなければなりません。 ただし、例外として、UNION ALL は GROUP BY の入力表式においてサポートされます。
  • 照会は再帰的であってはなりません。
  • 照会に以下のものを含めることはできません。
    • ニックネームへの参照
    • deterministic 関数でない関数
    • スカラー全選択
    • 全選択を持つ述部
    • 特殊レジスターおよび特殊レジスターの値に依存する組み込み関数
    • グローバル変数
    • SELECT DISTINCT
    • エラー・トレラントな nested-table-expression
  • FROM 節で複数の表またはビューを参照している場合、 明示的な INNER JOIN 構文を使わずに内部結合を 1 つだけ定義できます。
  • GROUP BY 節を指定する場合、以下の考慮事項が当てはまります。
    • サポートされている列関数は SUM、COUNT、COUNT_BIG、および GROUPING (DISTINCT は指定しない)。 選択リストには COUNT(*) または COUNT_BIG(*) 列が含まれていなければなりません。 マテリアライズ照会表の選択リストに SUM(X) (X は NULL 可能な引数) を含める場合は、マテリアライズ照会表の選択リストに COUNT(X) も含める必要があります。 これらの列関数は、式の一部とすることはできません。
    • HAVING 節は許可されていません。
    • 複数パーティションのデータベース・パーティション・グループ内の場合、 分散キーは GROUP BY 項目のサブセットでなければなりません。
  • マテリアライズ照会表には重複した行があってはならず、 GROUP BY 節が指定されているかどうかによって、この固有性要件に特有の、以下の制限が適用されます。
    • GROUP BY 節を指定する場合、以下の固有性に関連した制限が当てはまります。
      • すべての GROUP BY 項目が選択リストに含まれていること。
      • GROUP BY に GROUPING SETS、CUBE、または ROLLUP が含まれている場合、 選択リスト内の GROUP BY 項目とそれに関連した GROUPING 列関数は、 結果セットのユニーク・キーを形成していなければなりません。 したがって、以下の制約事項が満たされていなければなりません。
        • どのグループ・セットも反復することはできない。 例えば、 ROLLUP(X,Y),XGROUPING SETS((X,Y),(X),(X))と同等であるため、許可されません。
        • X が、GROUPING SETS、CUBE、または ROLLUP 内に出現する NULL 可能な GROUP BY 項目である場合、 選択リスト内に GROUPING(X) がなければならない。
    • GROUP BY 節を指定しない場合、以下の固有性に関連した制限が当てはまります。
      • マテリアライズ照会表の固有性要件は、 それぞれの基礎表に定義されているユニーク・キー制約の 1 つから マテリアライズ・ビュー用のユニーク・キーを導出することによって達成されます。 したがって、基礎表には少なくとも 1 つのユニーク・キー制約が定義されている必要があり、 それらのキーの列が、マテリアライズ照会表定義の選択リストに現れていなければなりません。
REFRESH DEFERRED を指定する場合は、以下のようにします。
  • マテリアライズ照会表を作成するときに、その後のステートメントで関連したステージング表を用意するつもりであれば、マテリアライズ照会表の全選択は、REFRESH IMMEDIATE オプションでマテリアライズ照会表を作成するときに使用する全選択の場合と同じ制限事項および規則に従う必要があります。
  • 照会が再帰的な場合は、照会処理の最適化のためにマテリアライズ照会表を使用しません。
  • マテリアライズ照会表は、静的照会の処理を最適化するためには使用されません。

全選択に GROUP BY 節が含まれるマテリアライズ照会表は、 全選択で参照される表からの要約されたデータです。 そのようなマテリアライズ照会表は、サマリー表 と呼ばれます。 サマリー表は、特殊化したタイプのマテリアライズ照会表です。

行レベルまたは列レベルのアクセス制御がアクティブになっている表に依存する表またはビューを fullselect で参照する場合、マテリアライズ照会表にデータを設定するときにそれらの行レベルまたは列レベルのアクセス制御は無視されます。 マテリアライズ照会表は自動的に作成され、その行レベルのアクセス制御はアクティブになります。 適切な権限を作成するか、 または SECADM 権限を持つユーザーがこのマテリアライズ照会表の行レベル・アクセス制御を非アクティブにしない限り、 ユーザーがこの表に直接アクセスを行っても内容は表示されません。 マテリアライズ照会表に対する行レベルまたは列レベルのアクセス制御は、SQL コンパイラーによるマテリアライズ照会表への内部ルーティングには影響を及ぼしません。

リフレッシュ可能テーブル・オプション
マテリアライズ照会表の属性のリフレッシュ可能オプションを定義します。
DATA INITIALLY DEFERRED
データは CREATE TABLE ステートメントの一部として表に挿入されません。 データを表に挿入するには、 table-name (表名) を指定する REFRESH TABLE ステートメントが使用されます。
REFRESH
表のデータを保守する方法を示します。
DEFERRED
REFRESH TABLE ステートメントを使っていつでも表のデータをリフレッシュできます。 表のデータには、 REFRESH TABLE ステートメント処理時のスナップショットである照会結果が反映されるにすぎません。 この属性を定義したシステム保守のマテリアライズ照会表には、INSERT、 UPDATE、または DELETE ステートメントを使用できません (SQLSTATE 42807)。 この属性を定義したユーザー保守のマテリアライズ照会表には、 INSERT、UPDATE、または DELETE ステートメントを使用できます。
IMMEDIATE
DELETE、INSERT、または UPDATE の一部として基礎表に加えられた変更は、 マテリアライズ照会表にカスケードされます。 その場合、表の内容は、どのポイント・イン・タイム指定でも、 指定した subselect (副選択) を処理する場合と同じ内容になります。 この属性を定義したマテリアライズ照会表 (MQT) には、INSERT、UPDATE、または DELETE ステートメントを使用できません (SQLSTATE 42807)。 MAINTAINED BY SYSTEM 節が指定されている場合、REFRESH IMMEDIATE オプションを使用するカラム・オーガナイズ MQT はサポートされません (SQL20058N)。
ENABLE QUERY OPTIMIZATION
適切な状況下では、マテリアライズ照会表を照会最適化に使用することができます。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用しません。 それでもその表を直接照会することはできます。
MAINTAINED BY
マテリアライズ照会表のデータが、システム、ユーザー、 またはレプリケーション・ツールのいずれによって保守されるかを指定します。 デフォルトは SYSTEM です。
SYSTEM
マテリアライズ照会表のデータがシステムによって保守されるように指定します。 ORGANIZE BY COLUMN として定義されるシステム保守のマテリアライズ照会表では、REFRESH DEFERRED オプションと DISTRIBUTE BY REPLICATION オプションを使用する必要があります。
ユーザー
マテリアライズ照会表のデータがユーザーによって保守されるように指定します。 ユーザーは、ユーザー保守のマテリアライズ照会表に対して、 更新、削除、また挿入操作を許可されます。 システム保守のマテリアライズ照会表で使用される REFRESH TABLE ステートメントは、ユーザー保守のマテリアライズ照会表に対しては呼び出せません。 REFRESH DEFERRED マテリアライズ照会表だけが、MAINTAINED BY USER として定義できます。
REPLICATION
マテリアライズ照会表のデータを外部レプリケーション・テクノロジーで保守することを指定します。 MAINTAINED BY REPLICATION は、パーティション・データベース環境 または Db2 pureScale 環境 では指定できません (SQLSTATE 56038)。 システム保守のマテリアライズ照会表に使用される REFRESH TABLE ステートメントを、レプリケーション保守のマテリアライズ照会表 (シャドー表 と呼ばれる) に対して発行することはできません。 MAINTAINED BY REPLICATION として定義できるのは REFRESH DEFERRED のマテリアライズ照会表だけであり、定義に ORGANIZE BY COLUMN が含まれていなければなりません。
FEDERATED_TOOL
マテリアライズ照会表のデータをフェデレーテッド・レプリケーション・ツールで保守することを指定します。 システム保守のマテリアライズ照会表で使用される REFRESH TABLE ステートメントは、フェデレーテッド・ツール保守のマテリアライズ照会表に対しては呼び出せません。 REFRESH DEFERRED のマテリアライズ照会表だけが、MAINTAINED BY FEDERATED_TOOL として定義できます。

このオプションを指定すると、CREATE TABLE ステートメント中の SELECT 節に基本表への参照を含めることはできません (SQLSTATE 428EC)。

ステージング表定義 (staging-table-definition)
関連付けられたマテリアライズ照会表を通して間接的に、ステージング表によりサポートされる照会を定義します。 マテリアライズ照会表の基礎表は、関連付けられたステージング表の基礎表でもあります。 ステージング表は、 基礎表の内容と同期化するためにマテリアライズ照会表に適用する必要のある変更を収集します。

行レベルまたは列レベルのアクセス制御がアクティブになっている表に 依存する表またはビューを fullselect で参照する場合、ステージング表にデータを設定するときにそれらの行レベルまたは列レベルのアクセス制御は無視されます。 ただし、ステージング表は自動的に作成され、その行レベルのアクセス制御はアクティブになります。 適切な権限を作成するか、 または SECADM 権限を持つユーザーがこのステージング表の行レベル・アクセス制御を非アクティブにしない限り、 ユーザーがこのステージング表に直接アクセスを行っても内容は表示されません。 ステージング表に対する行レベルおよび列レベルのアクセス制御は、ステージング表でキャプチャーした変更を関連マテリアライズ照会表に適用する内部プロセスには影響を及ぼしません。

ステージング・カラム名 (staging-column-name)
ステージング表の列の名前を指定します。 列名のリストを指定する場合、ステージング表を定義するマテリアライズ照会表の既存の列名の数よりも、2 つ名前の数が多くなければなりません。 そのマテリアライズ照会表がマテリアライズ照会表の複製である場合、 またはマテリアライズ照会表を定義している照会が GROUP BY 節を含んでいない場合の列名のリストは、 ステージング表を定義するマテリアライズ照会表の列の名前の数よりも、 3 つ名前の数が多くなければなりません。 各 column-name (列名) は、ユニークかつ非修飾でなければなりません。 列名のリストの指定がない場合、表の列は、関連付けられたマテリアライズ照会表の列名を継承します。 追加の列は GLOBALTRANSID および GLOBALTRANSTIME と名づけられ、 3 番目の列が必要な場合には OPERATIONTYPE という名前が付けられます。
表 2. ステージング表に加えられる追加の列
列名 データ・タイプ 列の説明
GLOBALTRANSID CHAR(8) FOR BIT DATA 伝搬された各行のグローバル・トランザクション ID
GLOBALTRANSTIME CHAR(13) FOR BIT DATA トランザクションのタイム・スタンプ
OPERATIONTYPE INTEGER 伝搬された行に対する操作。 挿入、更新、または削除のいずれか。

関連付けられたマテリアライズ照会表の任意の列が、生成列名と重複する場合には、 列名のリストを指定する必要があります (SQLSTATE 42711)。

FOR table-name2
ステージング表の定義に使用されるマテリアライズ照会表を指定します。 名前 (暗黙的または明示的なスキーマ名を含む) は、 REFRESH DEFERRED に定義された現行サーバーに存在するマテリアライズ照会表を指定していなければなりません。 関連付けられたマテリアライズ照会表の全選択は、 REFRESH IMMEDIATE オプションによってマテリアライズ照会表を作成するのに使用した全選択と同じ制限事項および規則に従う必要があります。

ステージング表の内容が、関連付けられたマテリアライズ照会表および基礎ソース表と整合する場合には、 REFRESH TABLE ステートメントを呼び出すことにより、ステージング表の内容を使用してマテリアライズ照会表をリフレッシュできます。

PROPAGATE IMMEDIATE
削除、挿入、または更新操作の一部として基礎表に加えられた変更は、ステージング表の同じ削除、挿入、または更新操作にカスケードされます。 ステージング表が不整合としてマークされていないのであれば、任意のポイント・イン・タイムにおけるその表の内容は、最後にマテリアライズ照会表をリフレッシュした時点からの、基礎表の差分変更になります。
ORGANIZE BY
表のデータ・ページにおけるデータの編成方法を指定します。
カラム・オーガナイズ MQT には、以下の制限が適用されます。
  • シャドー表以外の MQT は、MQT と同じ編成の表を参照しなければなりません。
  • カラム・オーガナイズ MQT(dft_table_orgデータベース構成パラメーターが COLUMN に設定されている場合でも)を作成する場合は、ORGANIZE BY COLUMN 節を指定する必要があります。
  • カラム・オーガナイズ MQT として、以下のタイプの表を使用できます。
    • シャドー表
    • ユーザー保守の MQT
    • REFRESH DEFERRED節とDISTRIBUTE BY REPLICATION節を使用して定義されるシステム保守 MQT。

デフォルトの編成は、 dft_table_org データベース構成パラメーターの値によって決まります。

ROW
データは、表のデータ・ページに行単位で保管されます。 特定のデータ・ページには、表の 1 つ以上の行のデータが保管されます。
COLUMN
データは、表のデータ・ページに列単位で保管されます。 各データ・ページには、表の 1 つの列のデータが保管されます。
ROW USING
データは、表のデータ・ページに行単位で保管され、dimensions clause、key sequence、または insert time を使用してさらに編成されます。 dimensions clause、key sequence、insert time のいずれかを指定する場合、ROW USING の指定はオプションです。ただし、データベースのデフォルトの表編成が COLUMN である場合には、ROW USING の指定が必須です。
DIMENSIONS (column-name, ...)
表データをクラスター化するために使用する、 各列または列のグループのディメンションを指定します。 表の定義でこの節が指定されている場合、その表はマルチディメンション・クラスタリング (MDC) 表と呼ばれます。 ディメンション・リスト内で括弧を使用して、列のグループが 1 つのディメンションとして扱われるように指定します。 DIMENSIONS キーワードはオプションです。

クラスタリング・ブロック索引はそれぞれ指定されたディメンション用に自動的に保持され、 節で使用されるすべての列で構成されるブロック索引は、 どのクラスタリング・ブロック索引にもすべての列が含まれていない場合には保持されます。 ORGANIZE BY 節で使用される列セットは、CLUSTER を指定する CREATE INDEX ステートメントの規則に従う必要があります。

ORGANIZE BY 節で指定された各列名は、表に対して定義されなければなりません (SQLSTATE 42703)。 ディメンションはディメンション・リストに複数回含めることはできません (SQLSTATE 42709)。 ディメンションに ROW CHANGE TIMESTAMP 列、行開始列、行終了列、トランザクション開始 ID 列を含めることはできません (SQLSTATE 429BV)。また、XML 列を含めることはできません (SQLSTATE 42962)。 表が拡張行サイズを使用する場合、データ・タイプが VARCHAR または VARGRAPHIC の各ディメンション列は、24 バイトを超える長さ属性を持つことはできません (SQLSTATE 54010)。

表のページは、表スペースのエクステント・サイズと同じサイズのブロックに配置され、 各ブロックの行すべては同じディメンション値の組み合わせを含みます。

表がマルチディメンション・クラスタリング (MDC) 表であると同時にパーティション表でもあることは可能です。 そのような表の列は、range-partition-spec と MDC キーの両方で使用できます。 表パーティションは、マルチ列であり、マルチディメンションではありません。

Db2 バージョン 9.7 フィックスパック 1 以降のリリースで作成されたパーティション MDC 表の場合、ブロック索引はパーティション化されます。 パーティション・ブロック索引の配置は、パーティション索引のストレージ配置に関する一般規則に従います。 MDC ブロック索引を含め、ある特定のデータ・パーティションのすべての索引パーティションが、1 つの索引オブジェクトを共有します。 デフォルトでは、特定の各データ・パーティションの索引パーティションは、データ・パーティションと同じ表スペースに存在します。 これは、パーティション・レベルの INDEX IN 節を使用してオーバーライドできます。

Db2 V9.7 以前で作成された MDC 表の場合、ブロック索引は非パーティション索引であり、再作成されても非パーティション索引のままです。 パーティション・ブロック索引を持つ MDC 表は、非パーティション・ブロック索引を持つ MDC 表と同じデータベースに共存できます。 非パーティション・ブロック索引をパーティション・ブロック索引に変更するには、Online Table Move を使用して MDC 表をマイグレーションします。

キー・シーケンス sequence-key-spec
表を、指定された範囲のキー・シーケンスの値に基づいて、 固定サイズの昇順キー・シーケンスに編成するよう指定します。 このような方法で編成された表を、範囲がクラスター化された表 といいます。 定義された範囲内にある有効なキー値のそれぞれには、物理表上の位置があらかじめ決定されています。 範囲がクラスター化された表に必要なストレージは、表の作成時に使用可能でなければならず、指定された範囲内の行数に行サイズを掛けた値を入れるのに十分なストレージでなければなりません (スペース所要量の決定について詳しくは、「 行サイズの制限 」および「 バイト・カウント」を参照してください)。
column-name
範囲がクラスター化された表のシーケンスを決定するユニーク・キーに含まれる、表の列を指定します。 列のデータ・タイプは SMALLINT、INTEGER、または BIGINT (SQLSTATE 42611) でなければならず、 また列は NOT NULL (SQLSTATE 42831) として定義される必要があります。 シーケンス・キーの中で、同じ列を複数回指定することはできません。 指定する列の数は 64 を超えてはなりません (SQLSTATE 54008)。

列ごとに昇順で指定されたキー・シーケンスで、列のカタログにユニーク索引項目が自動的に作成されます。 索引の名前は、SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM が付いたものになります。 表の編成はこのキーによって配列されているため、実際の索引オブジェクトはストレージに作成されません。 同じ列に、範囲がクラスター化された表のシーケンス・キーとして主キーまたはユニークな制約が定義されている場合は、 この同じ索引項目が制約に使用されます。

キー・シーケンスの指定には、列の制約を反映するチェック制約が存在します。 DISALLOW OVERFLOW 節が指定されていると、チェック制約の名前が RCT になり、チェック制約が施行されます。 ALLOW OVERFLOW 節が指定されていると、 チェック制約の名前が RCT_OFLOW になり、チェック制約は施行されません。

STARTING FROM 定数
column-name の範囲の下限となる定数を指定します。 指定された定数より小さい値は、 ALLOW OVERFLOW オプションが指定されている場合以外、許可されません。 column-name が SMALLINT または INTEGER 列の場合は、 定数を INTEGER 定数にする必要があります。 column-name が BIGINT 列の場合は、 定数を INTEGER または BIGINT 定数にする必要があります (SQLSTATE 42821)。 開始の定数が指定されない場合、デフォルト値は 1 です。
ENDING AT 定数
column-name の範囲の上限となる定数を指定します。 指定された定数より大きい値は、 ALLOW OVERFLOW オプションが指定されている場合以外、許可されません。 なお、終了の定数は、開始の定数より大きくなければなりません。 column-name が SMALLINT または INTEGER 列の場合は、 定数を INTEGER 定数にする必要があります。 column-name が BIGINT 列の場合は、 定数を INTEGER または BIGINT 定数にする必要があります (SQLSTATE 42821)。
ALLOW OVERFLOW
範囲がクラスター化された表で、定義された範囲外の値を行のキー値として許可することを指定します。 範囲がクラスター化された表がオーバーフローを許可するように作成される場合、 キー値が範囲外にある行にはあらかじめ決定された配列がなく、行は定義された範囲の一番下に置かれます。 これらのオーバーフロー行に関係する操作は、 定義された範囲内にキー値がある行での操作と比べて非効率的です。
DISALLOW OVERFLOW
範囲がクラスター化された表で、 定義された範囲外の値を行のキー値として許可しないことを指定します (SQLSTATE 23513)。 オーバーフロー行を許可しない、範囲がクラスター化された表では、常に、 すべての行が昇順キー・シーケンスで保守されます。

表が、範囲がクラスター化されたマテリアライズ照会表の場合、DISALLOW OVERFLOW 節は指定できません (SQLSTATE 429BG)。

PCTFREE 整数
各ページに残すフリー・スペースのパーセンテージを指定します。 各ページの最初の行は、制約なしに追加されます。 ページに行が追加される際には、 少なくとも integer で指定された分 (%) のフリー・スペースがページに残されます。 integer の値は 0 から 99 です。 システム・カタログ (SYSCAT.TABLES) の PCTFREE 値 -1 は、デフォルト値として解釈されます。 表ページのデフォルト PCTFREE 値は 0 です。
INSERT TIME
行が挿入される時を基準にして、行を表内でクラスター化するように指定します。 行が挿入される場所は、表オブジェクトの論理的な末尾です。使用可能スペースを探索することはありません。

挿入時間を基準として編成される表には、挿入時クラスタリング (ITC) 表と呼ばれるものがあります。 このタイプの表では、REORG TABLE RECLAIM EXTENTS を使用することで、表スペース内の他のオブジェクトですぐに使用するために空きエクステントを再利用できます。

データは、暗黙的に作成された仮想ディメンションを使用してクラスター化されます。 この仮想ディメンションのために、クラスタリング・ブロック索引が自動的に保守されます。 仮想ディメンションは、直接操作するこことはできません。また、表に存在する行ごとにスペースが使用されることはありません。 表のページは、同じサイズのブロック単位で配置されます。このサイズは、表スペースのエクステント・サイズに相当します。

表が型付き表の場合、ORGANIZE BY INSERT TIME 節は指定できません (SQLSTATE 428DH)。

DATA CAPTURE
データベース間のデータのレプリケーションに関する追加情報を、 ログに書き込むかどうかを指定します。 この節は、副表を作成する際には指定できません (SQLSTATE 428DR)。

この節が指定されず、当該の表が型付き表でない場合、デフォルトは、表が作成されるときのスキーマの DATA CAPTURE 設定によって定まります。

NONE
追加情報をログに記録しないことを指定します。
CHANGES
この表に対する SQL 変更についての追加情報をログに書き込むことを指定します。 このオプションは、表を複製する場合で、 キャプチャー・プログラムを使用してログからこの表に対する変更内容をキャプチャーする場合に必須です。

表が、副表ではない型付き表である場合、このオプションはサポートされません (SQLSTATE 428DH)。

IN 表スペース名, ...
表を作成する表スペースを指定します。 表スペースは既存のものでなければならず、同じデータベース・パーティション・グループに含まれていることも必要です。また、すべてが REGULAR DMS 表スペースであるか、すべてが LARGE DMS 表スペースであるか、すべてが SMS 表スペースである必要もあります (SQLSTATE 42838)。ステートメントの許可 ID には、それらの表スペースに対する USE 特権が必要です。

表レベルでは、最大で 1 個の IN 節だけが認められています。 1 つの表が使用するすべてのデータ表スペースは、同じページ・サイズ、同じエクステント・サイズでなければなりません。

表スペースを 1 つだけ指定した場合、すべての表パーツはその表スペースに保管されます。 副表は表階層のルート表から表スペースを継承するので、副表の作成の際にこの節を指定することはできません (SQLSTATE 42613)。

この節が指定されない場合、データベース・マネージャーは、必要最小限のページ・サイズを持ち、ステートメントの許可 ID に USE 特権があり、ページ・サイズの行サイズ制限内に行サイズがある表スペースを (データベース内の既存の表スペース・セットから) 選択します。

複数の表スペースが適格な場合、ステートメントの許可 ID に表スペースでの USE 特権が付与された方法に応じて、以下の優先順位で表スペースを選択します。
  1. 許可 ID
  2. 許可 ID が付与されているロール
  3. 許可 ID を保有するグループ
  4. 許可 ID を保有するグループが付与されているロール
  5. PUBLIC
  6. PUBLIC が付与されているロール
それでも複数の表スペースがそれにあてはまる場合は、 最終選択はデータベース・マネージャーによって行われます。
表スペースの判別は、以下の場合に変更されることがあります。
  • 表スペースをドロップまたは作成するとき
  • USE 特権を付与または取り消すとき

パーティション表では、それぞれのデータ・パーティションを複数の表スペースに配分できます。 複数の表スペースを指定する場合、そのすべての表スペースは既存のものでなければならず、すべてが SMS 表スペースであるか、すべてが REGULAR DMS 表スペースであるか、すべてが LARGE DMS 表スペースであることが必要です (SQLSTATE 42838)。 ステートメントの許可 ID には、指定したすべての表スペースに対する USE 特権が必要です。

十分な表のページ・サイズは、行のバイト・カウントか列の数のいずれかによって決まります。 詳しくは、 行サイズの制限を参照してください。

LARGE 表スペースに表を配置すると、以下のようになります。
  • REGULAR 表スペースに配置する表よりもサイズを大きくできます。 表および表スペースの制限について詳しくは、 『SQL の制限』を参照してください。
  • 表の 1 データ・ページあたり 255 を超える行数をサポートできるので、データ・ページのスペース使用率が向上します。
  • 表に定義する索引には、REGULAR 表スペースに配置する表に定義する索引と比べて、索引 1 行あたり 2 バイトが追加で必要になります。
CYCLE または NO CYCLE
明示的な表スペースのないデータ・パーティションの数が、指定された表スペースの数を超えてもよいかどうかを指定します。
CYCLE
明示的な表スペースのないデータ・パーティションの数が、指定された表スペースの数を超えた場合に、データ・パーティションにラウンドロビン方式で表スペースを割り当てることを指定します。
NO CYCLE
明示的な表スペースのないデータ・パーティションの数が、指定された表スペースの数を超えてはならないことを指定します (SQLSTATE 428G1)。 このオプションを指定すると、データ・パーティションにラウンドロビン方式で表スペースが割り当てられることはありません。
表スペース・オプション
索引または長形式列の値を保管する表スペースを指定します。 表スペースのタイプについて詳しくは、 CREATE TABLESPACEを参照してください。
INDEX IN 表スペース名
非パーティション表の索引またはパーティション表の非パーティション索引を作成する表スペースを指定します。 指定する表スペースは既存でなければなりません。表のデータが DMS 表スペースにある場合は DMS 表スペースでなければならず、パーティション表のデータが SMS 表スペースにある場合は SMS 表スペースでなければなりません。ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です。その表スペースは、tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。

索引を組み込む表スペースの指定は、表の作成時に行うことができます。また、パーティション表の場合は、非パーティション索引の CREATE INDEX ステートメントの IN 節を指定することによって行うことも可能です。 表スペースに対する USE 特権があるかどうかのチェックは、後に索引を作成する時ではなく表の作成時に行われます。

パーティション表上の非パーティション索引の場合、索引のストレージは、次のようになります。
  • CREATE INDEX ステートメントの IN 節による表スペース
  • CREATE TABLE ステートメントの INDEX IN 節に指定された表レベルの表スペース
  • 上記のどちらも指定されていない場合は、最初のアタッチされたデータ・パーティションか、可視のデータ・パーティションの表スペースに索引が保管されます。
パーティション表上のパーティション索引に関する詳細情報は、partition-element INDEX IN 節の説明を参照してください。
LONG IN 表スペース名
長形式列の値を保管する表スペースを指定します。 長形式列には、LOB データ・タイプ、XML タイプ、これらのいずれかをソース・タイプとする特殊タイプ、インラインで保管できない値を持つユーザー定義の構造化タイプで定義された列が含まれます。 このオプションは、IN 節で DMS 表スペースを指定した場合にのみ使用できます。
注: 自動ストレージ表スペースは DMS 表スペースでもあります。

指定した表スペースは存在していなければなりません。 これは、データが保管されている同じ表スペースである場合、REGULAR 表スペースとすることもできます。そうでない場合は、ステートメントの許可 ID が USE 特権を保持する LARGE DMS 表スペースでなければなりません。 さらに、これは tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。

長形式、LOB、または XML の列を組み込む表スペースの指定は、表の作成時にのみ行えます。 USE 特権があるかどうかのチェックは、長形式列または LOB 列を追加するときではなく表の作成時に行われます。

パーティション表での LONG IN 節の使用に関する規則については、 『パーティション表でのラージ・オブジェクトの動作』を参照してください。

distribution-clause (分布節)
データベース・パーティションの方式、つまり複数のデータベース・パーティションにデータを配分させる方法を指定します。
DISTRIBUTE BY HASH (column-name, ...)
複数のデータベース・パーティションにデータを分散させる方式として、 指定の列でデフォルトのハッシュ機能を使用する方式を指定します。 指定の列は分散キー と呼ばれます。
  • 各列名は、表の列を識別する非修飾名でなければなりません (SQLSTATE 42703)。
  • 同じ列を複数回指定することはできません (SQLSTATE 42709)。
  • データ・タイプが BLOB、CLOB、DBCLOB、XML、これらのいずれかのタイプに基づく特殊タイプ、または構造化タイプである場合、分散キーの一部として列を使用することはできません (SQLSTATE 42962)。
  • 分散キーに ROW CHANGE TIMESTAMP 列を含めることはできません (SQLSTATE 429BV)。
  • 副表では、分散キーを指定できません。分散キーは、表階層のルート表から継承されるからです (SQLSTATE 42613)。
  • 分散キーに、行開始、行終了、またはトランザクション開始の ID 列を含めることはできません。
  • DISTRIBUTE BY HASH 節が指定されていない場合、および複数のデータベース・パーティションを持つ複数パーティション・データベース・パーティション・グループに表が存在する場合は、デフォルトの分散キーが自動的に定義されます。
  • 分散キーの列は、強制適用されるユニーク制約を構成する列のサブセットでなければなりません。

デフォルトの分散キーの要件を満たす列が存在しない場合は、分散キーなしで表が作成されます。 このような表は、単一パーティションのデータベース・パーティション・グループに対して定義された表スペースでのみ認められています。

単一パーティションのデータベース・パーティション・グループに対して定義された表スペースの表の場合は、分散キーとして有効なデータ・タイプの任意の列の集合を分散キーの定義に使用できます。 この節を指定しない場合は、分散キーが作成されません。

分散キーに関連する制約事項については、 規則を参照してください。

DISTRIBUTE BY RANDOM
データベース・パーティション・グループのすべてのデータベース・パーティションに均等にデータを分散させるようにデータベース・マネージャーが分散キーを選択する、という指定をします。 データベース・マネージャーがこれを行うために使用する方法が 2 つあります。
  • ユニーク別ランダム: 表にユニーク・キーまたは主キーが含まれる場合、キーの列のユニーク特性を使用して、データのランダム・スプレッドを作成します。 ユニーク・キーまたは主キーの列は、分散キーとして使用されます。
  • 生成別ランダム: 表にユニーク・キーも主キーも含まれない場合、データベース・マネージャーは、表に 1 つの列を挿入し、ハッシュ関数で使用する値を生成して生成値を保管します。 列は IMPLICITLY HIDDEN 文節を使用して作成されるため、明示的に指定しない限り、照会には表示されません。 その列の値は、新規行が表に追加されると自動的に生成されます。 デフォルトでは、列名は RANDOM_DISTRIBUTION_KEYです。 名前が既存の列と重複してしまう場合、重複しない名前がデータベース・マネージャーによって生成されます。
DISTRIBUTE BY REPLICATION
表が定義される表スペースのデータベース・パーティション・グループの各データベース・パーティションに対して、表に保管されたデータを物理的に複製することを指定します。 つまり、それぞれのデータベース・パーティションには、 表のデータすべてのコピーが存在することになります。 このオプションは、マテリアライズ照会表にのみ指定できます (SQLSTATE 42997)。
PARTITIONING 節
データベース・パーティション内でデータを分割する方法を指定します。
PARTITION BY RANGE range-partition-spec
表の表パーティション方式を指定します。
partition-expression
キー・データを指定します。このキー・データに対して、ターゲット・データ・パーティションを決定するための範囲を定義します。
column-name
表パーティション・キーの列を指定します。 column-name は、表の列を指定する非修飾名でなければなりません (SQLSTATE 42703)。 同じ列を複数回指定することはできません (SQLSTATE 42709)。 データ・タイプが BLOB、CLOB、DBCLOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプの列は、表パーティション・キーの一部として使用できません (SQLSTATE 42962)。

範囲仕様に使用される数値リテラルには、数値リテラル用の規則が適用されます。 数値列に対応する範囲で使用されるすべての数値リテラル (10 進浮動小数点特殊値を除く) は、数値定数に指定された規則に従って、整数、浮動小数点数、または 10 進定数として解釈されます。 結果として 10 進浮動小数点数列では、データ・パーティションの範囲仕様に使用できる最小および最大の数値定数の値は、それぞれ、最小の DOUBLE 値および最大の DOUBLE 値になります。 10 進浮動小数点特殊値を範囲仕様で使用することができます。 すべての 10 進浮動小数点特殊値は、MINVALUE よりも大きく MAXVALUE よりも小さいものとして解釈されます。

表パーティション列に ROW CHANGE TIMESTAMP 列を含めることはできません (SQLSTATE 429BV)。 指定する列の数が 16 を超えてはなりません (SQLSTATE 54008)。

NULLS LAST または NULLS FIRST
表パーティション・キー列に NULL 値がある行のパーティション配置を指定します。 これらの節は、ORDER BY 節で行が戻される順序には影響を与えません。
NULLS LAST
NULL 値を最高値と見なし、MAXVALUE で終わる範囲に配置するように指定します。
NULLS FIRST
NULL 値を最低値と見なし、MINVALUE で始まる範囲に配置するように指定します。
partition-element
データ・パーティション・キーの範囲と、その範囲内の表の行を保管する表スペースを指定します。
PARTITION 区画名
データ・パーティションの名前を指定します。 この名前は、表の他のいずれのデータ・パーティションとも同じであってはなりません (SQLSTATE 42710)。 この節が指定されていない場合、名前は PART の後に整数値の文字形式が続き、表に対して固有な名前になります。
boundary-spec
データ・パーティションの境界を指定します。 最下位のデータ・パーティションには starting-clause を組み込み、最上位のデータ・パーティションには ending-clause を組み込む必要があります (SQLSTATE 56016)。 最下位と最上位の間にあるデータ・パーティションには、starting-clause と ending-clause のいずれかまたは両方の節を組み込めます。 ending-clause だけを指定する場合は、その直前のデータ・パーティションにも ending-clause を組み込んでおく必要があります (SQLSTATE 56016)。
starting-clause
データ・パーティションの範囲の下限を指定します。 開始値は、少なくとも 1 つ指定しなければなりませんが、開始値の数がデータ・パーティション・キーの列の数を超えてはなりません (SQLSTATE 53038)。 指定した値の数が列の数よりも少なければ、残りの値は暗黙的に MINVALUE になります。
STARTING FROM
この後に、starting-clause を指定します。
constant
対応する column-name のデータ・タイプに割り当てることができるデータ・タイプの定数値を指定します (SQLSTATE 53045)。 この値は、表の他の boundary-spec の範囲内にあってはなりません (SQLSTATE 56016)。
MINVALUE
対応する column-name のデータ・タイプの最小可能値より小さい値を指定します。
MAXVALUE
対応する column-name のデータ・タイプの最大可能値より大きい値を指定します。
INCLUSIVE
指定した範囲値をデータ・パーティションに含めることを指定します。
EXCLUSIVE
指定した constant 値をデータ・パーティションから除外することを指定します。 この指定は、MINVALUE または MAXVALUE を指定した場合は無視されます。
ending-clause
データ・パーティションの範囲の上限を指定します。 開始値は、少なくとも 1 つ指定しなければなりませんが、開始値の数がデータ・パーティション・キーの列の数を超えてはなりません (SQLSTATE 53038)。 指定した値の数が列の数よりも少なければ、残りの値は暗黙的に MAXVALUE になります。
ENDING AT
この後に、ending-clause を指定します。
constant
対応する column-name のデータ・タイプに割り当てることができるデータ・タイプの定数値を指定します (SQLSTATE 53045)。 この値は、表の他の boundary-spec の範囲内にあってはなりません (SQLSTATE 56016)。
MINVALUE
対応する column-name のデータ・タイプの最小可能値より小さい値を指定します。
MAXVALUE
対応する column-name のデータ・タイプの最大可能値より大きい値を指定します。
INCLUSIVE
指定した範囲値をデータ・パーティションに含めることを指定します。
EXCLUSIVE
指定した constant 値をデータ・パーティションから除外することを指定します。 この指定は、MINVALUE または MAXVALUE を指定した場合は無視されます。
IN 表スペース名
データ・パーティションが保管される表スペースを指定します。 指定する表スペースは、パーティション表の他の表スペースと同じページ・サイズ、同じデータベース・パーティション・グループ、同じスペース管理方式でなければなりません (SQLSTATE 42838)。ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です。 この節を指定しない場合は、デフォルトで、表に指定されている表スペースのリストからラウンドロビン方式で表スペースが割り当てられます。 LONG IN 節によってラージ・オブジェクトの表スペースを指定しなかった場合は、ラージ・オブジェクトも、データ・パーティションのその他の行と同じ表スペースに配置されます。 パーティション表の場合は、LONG IN 節を使用して、表スペースのリストを用意できます。 このリストは、各データ・パーティションのラージ・オブジェクトを配置するためにラウンドロビン方式で使用されます。 パーティション表での LONG IN 節の使用に関する規則については、 『パーティション表でのラージ・オブジェクトの動作』を参照してください。

CREATE TABLE ステートメントまたは CREATE INDEX ステートメントで INDEX IN 節を指定しない場合は、表の最初の可視パーティションまたはアタッチされたパーティションと同じ表スペースに索引が配置されます。

INDEX IN 表スペース名
パーティション表上のパーティション索引が保管される表スペースを指定します。

partition-element レベルの INDEX IN 節は、パーティション索引のストレージのみに影響します。 索引のストレージは、次のようになります。

  • 表の作成時にパーティション・レベルで INDEX IN 節を指定する場合は、パーティション索引は、指定された表スペースに保管されます。
  • 表の作成時にパーティション・レベルで INDEX IN 節を指定しない場合は、パーティション索引は、対応するデータ・パーティションの表スペースに保管されます。

INDEX IN 節は、データ表スペースが DMS 表スペースで、INDEX IN 節で指定された表スペースが DMS 表スペースの場合にのみ指定できます。 データ表スペースが SMS 表スペースの場合は、エラーが戻されます (SQLSTATE 42839)。

LONG IN 表スペース名
長形式列の値を保管する表スペースを指定します。 長形式列には、LOB データ・タイプ、XML タイプ、これらのいずれかをソース・タイプとする特殊タイプ、インラインで保管できない値を持つユーザー定義の構造化タイプで定義された列が含まれます。 このオプションは、IN 節で DMS 表スペースを指定した場合にのみ使用できます。
注: 自動ストレージ表スペースは DMS 表スペースでもあります。

指定した表スペースは存在していなければなりません。 これは、データが保管されている同じ表スペースである場合、REGULAR 表スペースとすることもできます。そうでない場合は、ステートメントの許可 ID が USE 特権を保持する LARGE DMS 表スペースでなければなりません。 さらに、これは tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。

長形式、LOB、または XML の列を組み込む表スペースの指定は、表の作成時にのみ行えます。 USE 特権があるかどうかのチェックは、長形式列または LOB 列を追加するときではなく表の作成時に行われます。

パーティション表での LONG IN 節の使用に関する規則については、 『パーティション表でのラージ・オブジェクトの動作』を参照してください。

EVERY (定数)
自動生成形式の構文を使用した場合に、各データ・パーティション範囲の幅を指定します。 データ・パーティションは、STARTING FROM 値から始まる範囲にこの数の値を組み込む形で作成されます。 この形式の構文は、数値または日時の 1 つの列でパーティション化されている表についてのみサポートされています (SQLSTATE 53038)。

パーティション・キー列が数値タイプの場合、最初のパーティションの開始値は、starting-clause に指定されている値になります。 最初のパーティションと他のすべてのパーティションの終了値は、パーティションの開始値に、EVERY 節の constant として指定されている増分値を加算する形で計算されます。 他のすべてのパーティションの開始値は、直前のパーティションの開始値に、EVERY 節の constant として指定されている増分値を加算する形で計算されます。

パーティション・キー列が DATE または TIMESTAMP の場合、最初のパーティションの開始値は、starting-clause に指定されている値になります。 最初のパーティションと他のすべてのパーティションの終了値は、パーティションの開始値に、EVERY 節のラベル付き期間として指定されている増分値を加算する形で計算されます。 他のすべてのパーティションの開始値は、直前のパーティションの開始値に、EVERY 節のラベル付き期間として指定されている増分値を加算する形で計算されます。

数値列の場合、EVERY の値は正の数値定数でなければならず、日時列の場合、EVERY の値はラベル付き期間でなければなりません (SQLSTATE 53045)。

COMPRESS
表に対して行圧縮を使用するかどうかを指定します。 ddl_compression_def 構成パラメーターは、COMPRESS キーワードのデフォルト値を決定します。
いいえ
行圧縮は無効です。
はい
行圧縮は有効です。 表に対する挿入と更新の操作で、行圧縮が使用されるようになります。 既存の XML ストレージ・オブジェクトも圧縮されます。 アダプティブ圧縮とクラシック行圧縮のどちらの場合も、表に十分なデータが読み込まれた後で、表レベルのコンプレッション・ディクショナリーが自動的に作成されます。 これは、XML ストレージ・オブジェクトのデータにも当てはまります。 つまり、XML ストレージ・オブジェクトに十分なデータがある場合、 コンプレッション・ディクショナリーが自動的に作成され、XML 文書は圧縮の対象になります。
注: アダプティブ圧縮を使用するかクラシック行圧縮を使用するかに関係なく、XML ストレージ・オブジェクトに適用される圧縮は同じです。

アダプティブ行圧縮の場合は、 ページ・レベルのコンプレッション・ディクショナリーが、データ挿入またはデータ変更が表に行われるとすぐに作成または更新されます。

ADAPTIVE
アダプティブ圧縮を使用可能にします。レコードは表レベルおよびページ・レベルのコンプレッション・ディクショナリーを使って圧縮されるようになります。 COMPRESS YES ADAPTIVE の機能は、COMPRESS YES STATIC の機能のスーパーセットです。 これは、COMPRESS YES を明示的に指定する場合のデフォルトです。
STATIC
表レベルのコンプレッション・ディクショナリーを使用したクラシック行圧縮を使用可能にします。 これは、以前の Db2 バージョンで存在していた行圧縮機能と同じです。 これは、行圧縮がデフォルトで使用され、COMPRESS YES が明示的に指定されていない場合のデフォルトです。
VALUE COMPRESSION
使用される行形式を判別します。 それぞれのデータ・タイプは、使用される行形式に応じた、異なるバイト・カウントを持ちます。 詳しくは、 バイト・カウントを参照してください。 表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。

NULL 値は 3 バイトを使用して保管されます。 これは、VALUE COMPRESSION がアクティブでない場合の、すべてのデータ・タイプの列と同じスペース、またはそれより少ないスペースです (ただし CHAR(1) を除きます)。 列が NULL 可能として定義されているかいないかは、行サイズ計算には影響しません。 データ・タイプが VARCHAR、VARGRAPHIC、LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB、VARBINARY、BLOB、XML である列の、長さがゼロのデータ値は、2 バイトだけ使用して保管されます。これは、VALUE COMPRESSION がアクティブでない場合に必要とされるストレージを下回ります。 COMPRESS SYSTEM DEFAULT オプションを使用して列を定義すると、列のシステム・デフォルト値も 合計 3 バイトのストレージを使用して保管できるようになります。 これをサポートする行形式は、各データ・タイプのバイト・カウントを決定し、NULL 値、長さがゼロの値、またはシステム・デフォルト値への更新、またはそれらの値からの更新を行う際に、データ・フラグメントの原因となる傾向があります。

WITH RESTRICT ON DROP
表をドロップできないこと、また、表を含む表スペースをドロップできないことを指定します。
NOT LOGGED INITIALLY
表を作成する作業と同一の作業単位にある INSERT、DELETE、UPDATE、CREATE INDEX、DROP INDEX、または ALTER TABLE 操作によって表に対して行われた変更は、いずれもログに記録されません。 このオプションを使用する際のその他の考慮事項については、このステートメントの「 」セクションを参照してください。

カタログの変更と、ストレージに関連する情報は、 以後の作業単位で表に対して行われた操作と同様にすべてログ記録されます。

注: NOT LOGGED INITIALLY 属性がアクティブ化されている表に対してログに記録されないアクティビティーが発生し、ステートメントが失敗した (ロールバックの原因となった) 場合、または ROLLBACK TO SAVEPOINT が実行された場合、作業単位全体がロールバックされます (SQL1476N)。 さらに、NOT LOGGED INITIALLY 属性がアクティブ化されている表は、 ロールバックされた後にアクセス不能としてマークされ、ドロップしかできなくなります。 したがって、NOT LOGGED INITIALLY 属性がアクティブ化されている作業単位内では、エラーの可能性を最小限に抑えるべきです。
CCSID
表に格納されるストリング・データのコード化スキームを指定します。 CCSID 節を指定しない場合のデフォルトは、Unicode データベースでは CCSID UNICODE、 他のすべてのデータベースでは CCSID ASCII になります。
ASCII
ストリング・データがデータベース・コード・ページでエンコードされることを指定します。 データベースが Unicode データベースの場合は、CCSID ASCII を指定することはできません (SQLSTATE 56031)。
UNICODE
ストリング・データが Unicode でエンコードされることを指定します。 データベースが Unicode データベースの場合、文字データは UTF-8、 GRAPHIC データは UCS-2 になります。 データベースが Unicode データベースでない場合、文字データは UTF-8になり、グラフィック・データは許可されません。
データベースが Unicode データベースでない場合、 CCSID UNICODE を指定して表を作成できますが、以下の規則が適用されます。
  • 表を作成する前に、データベース構成で代替照合シーケンスを指定する必要があります (SQLSTATE 56031)。 CCSID UNICODE 表は、データベース構成で指定した代替照合シーケンスを使用して照合されます。

    サポートされている唯一の代替照合シーケンスは IDENTITY_16BIT です。

  • GRAPHIC タイプ、XML タイプ、およびユーザー定義タイプは CCSID UNICODE 表内では使用できません (SQLSTATE 560C1)。
  • アンカー・データ・タイプは、CCSID UNICODE を使用して作成された表の列にアンカーすることはできません (SQLSTATE 428HS)。
  • 同じ表に CCSID UNICODE 文節と DATA CAPTURE CHANGES 文節の両方を指定することはできません (SQLSTATE 42613)。
  • Explain 表は CCSID UNICODE では作成できません (SQLSTATE 55002)。
  • 作成済み一時表および宣言済み一時表は CCSID UNICODE では作成できません (SQLSTATE 56031)。
  • CCSID UNICODE 表は CREATE SCHEMA ステートメントでは作成できません (SQLSTATE 53090)。
  • ロード操作の例外表の CCSID は、この操作のターゲット表と同じでなければなりません (SQLSTATE 428A5)。
  • SET INTEGRITY ステートメントの例外表の CCSID は、 このステートメントのターゲット表と同じでなければなりません (SQLSTATE 53090)。
  • イベント・モニター・データのターゲット表は CCSID UNICODE として宣言されていてはなりません (SQLSTATE 55049)。
  • SQL ステートメントは常にデータベース・コード・ページで解釈されます。 特にこのことは、リテラル、16 進数リテラル、および区切り ID 内のすべての文字が データベース・コード・ページで表記されていなければならないということを意味します。 そうでないと、文字は置換文字によって置き換えられてしまいます。

呼び出される SQL ステートメント内の表の CCSID に関係なく、 アプリケーション内のホスト変数は常にアプリケーションのコード・ページで表記されます。 データベース・マネージャーは、アプリケーション・コード・ページとセクション・コード・ページ間での データ変換の必要に応じて、コード・ページ変換を実行します。 レジストリー変数 DB2CODEPAGE をクライアント側で設定して、 アプリケーション・コード・ページを変更することができます。

SECURITY POLICY
表に関連付けるセキュリティー・ポリシーの名前を指定します。
ポリシー名
現行のサーバーに既に存在するセキュリティー・ポリシーを指定します (SQLSTATE 42704)。 この節によって、行の保護または列の保護がアクティブになるわけではありません。 詳しくは、 LBAC を使用したデータの保護を参照してください。
OPTIONS (table-option-name ストリング定数, ...)
表オプションは、リモート基本表を識別するために使用します。 table-option-name はオプションの名前です。 string-constant は、表オプションの設定を指定します。 string-constant は単一引用符で囲む必要があります。

リモート・サーバー (CREATE SERVER ステートメントに指定されたサーバー名) は、OPTIONS 節に指定しなければなりません。 OPTIONS 節を使用して、 作成中のリモート基本表のスキーマまたは非修飾名をオーバーライドすることもできます。

スキーマ名を指定することをお勧めします。 リモート・スキーマ名が指定されていない場合、表名の修飾子が使用されます。 表名に修飾子がない場合、ステートメントの許可 ID が使用されます。

リモート基本表の非修飾名が指定されていない場合、 table-name が使用されます。

ルール

  • すべての構造化タイプまたは XML タイプの列のインライン長を含む列のバイト・カウントの合計は、表スペースのページ・サイズに基づく行サイズの制限を超えてはなりません (SQLSTATE 54010)。 詳しくは、 バイト・カウントを参照してください。 型付き表の場合は、表階層のルート表の列、および表階層内の各副表で新たに追加されるすべての列が、バイト・カウントの対象になります (追加の副表の列は、NULL 不可として定義されていても、バイト・カウントの際には NULL 可能と見なされます)。 また、各行がどの副表からきたものかを識別するため、4 バイトのオーバーヘッドが追加されます。
  • 表内に存在する列の数は、1,012 個を超えてはなりません (SQLSTATE 54011)。 型付き表の場合は、 表階層内のすべての副表タイプに含まれている属性の合計が 1,010 個を超えてはなりません。 生成別ランダム方式を使用するランダム分散表の場合、 RANDOM_DISTRIBUTION_KEY 列が含まれるため、列の数は 1,011 を超えることはできません。
  • 型付き表のオブジェクト ID 列は更新できません (SQLSTATE 42808)。
  • 表に対して定義された強制適用されるユニーク・キー制約または主キー制約は、 分散キーのスーパーセットでなければなりません (SQLSTATE 42997)。
  • 以下の規則は、複数データベース・パーティション・データベースに対してのみ適用されます。
    • LOBXML、これらのタイプのうちのいずれかに基づく特殊タイプ、または構造化タイプの列だけで構成された表は、単 一パーティションのデータベース・パーティション・グループで定義されている表スペース内でしか作成できません。
    • 複数パーティションのデータベース・パーティション・グループに対して定義された表スペースの表の分散キー定義は変更できません。
    • 型付き表の分散キー列は OID 列にする必要があります。
    • パーティション化されたステージング表はサポートされていません。
  • Db2 pureScale 環境で実行されているデータベースの場合、ORGANIZE BY 節は指定できません (SQLSTATE 42997)。
  • 範囲がクラスター化された表には、次のような制限が適用されます。
    • 範囲がクラスター化された表は、 Db2 pureScale 環境 では指定できません (SQLSTATE 42997)。
    • クラスター索引は作成できません。
    • 列を追加するための表の変更はサポートされていません。
    • 列のデータ・タイプを変更するための表の変更はサポートされていません。
    • PCTFREE を変更するための表の変更はサポートされていません。
    • APPEND ON を設定するための表の変更はサポートされていません。
    • DETAILED 統計は使用できません。
    • 表へのデータの取り込みにロード・ユーティリティーを使用することはできません。
    • 列をタイプ XML にすることはできません。
    • ランダム分散表として作成することはできません。
  • ランダム分散表には以下の制約事項が適用されます。
    • 型付き表として定義することはできません
    • 範囲がクラスター化された表として定義することはできません
    • マテリアライズ照会表として定義することはできません
    • ステージング表として定義することはできません
    • ランダム分散表で生成別ランダム方式を使用する場合 (ユニーク・キーも主キーも使用せずにランダム分散表が作成される場合)、以下の追加の制限事項が適用されます。
      • ロード操作中や SET INTEGRITY ステートメントの実行中など、制約が大量に検査されている場合、例外表として使用することはできません。
      • Explain 表として使用することはできません
  • 表にセキュリティー・ポリシーが関連付けられていて、タイプ DB2SECURITYLABEL の列または SECURED WITH 節で定義されている列が含まれていなければ、表は保護されません。 前者の場合は、行レベルの細分度で表が保護されていることを意味し、後者の場合は、列レベルの細分度で表が保護されていることを意味します。
  • 表にセキュリティー・ポリシーが関連付けられていなければ、タイプ DB2SECURITYLABEL の列を宣言できません (SQLSTATE 55064)
  • セキュリティー・ポリシーは、型付き表には追加できません (SQLSTATE 428DH)。 マテリアライズ照会表やステージング表にも追加できません (SQLSTATE 428FG)。
  • エラー・トレラントな nested-table-expression は、materialized-query-definition の全選択に指定できません (SQLSTATE 428GG)。
  • マテリアライズ照会表を作成するとき、その表が依存するいずれかの基本表がラベル・ベースのアクセス制御によって保護されている場合は、以下の規則が適用されます。
    • 行レベルのセキュリティー
      • マテリアライズ照会表の全選択の中で、1 つの表だけが列タイプ DB2SECURITYLABEL を持つことができます (SQLSTATE 428FG)。
      • 行セキュリティー・ラベル列を選択して、マテリアライズ照会表定義の最外部の SELECT リストでスタンドアロン列として参照する必要があります (SQLSTATE 428FG)。 マテリアライズ照会表の中の対応する列には、行セキュリティー・ラベル列というマークが付けられます。
    • 列レベルのセキュリティー
      • マテリアライズ照会表定義に関与する表が、セキュリティー・ラベルによって保護される列を持っている場合、その列がマテリアライズ照会表定義に出現するなら、その列のセキュリティー・ラベルはマテリアライズ照会表の中の対応する列によって継承されます。 詳しくは、このトピックの中の例を参照してください。
    • ラベル・ベースのアクセス制御によって保護された 1 つ以上の表に依存するマテリアライズ照会表を作成するとき、すべての基本表は同じセキュリティー・ポリシー・オブジェクトを持つ必要があります (SQLSTATE 428FG)。 マテリアライズ照会表は自動的にそのセキュリティー・ポリシー・オブジェクトを使って保護されます。
    • マテリアライズ照会表の列に関連付けられたセキュリティー・ラベルは、1 つ以上のセキュリティー・ラベルの集約として計算されます。 この集約は、そのマテリアライズ照会表列の定義で使われる基本表の列に関連付けられたセキュリティー・ラベルで構成されます。 また、その集約は、マテリアライズ照会表定義の他の部分 (WHERE 節、ORDER BY 節、および HAVING 節など) に出現する基本表列に関連付けられたセキュリティー・ラベルによっても構成されます。 ALTER SECURITY POLICY には、2 つのセキュリティー・ラベルがどのように集約されるかが記述されています。 詳しくは、このトピックの中の例を参照してください。
    • ラベル・ベースのアクセス制御で保護されたマテリアライズ照会表のステージング表が作成されるとき、そのステージング表はマテリアライズ照会表と同じような自動保護を保持します。 詳しくは、このトピックの中の例を参照してください。
    • ラベル・ベースのアクセス制御は、通常の表に対して実施されるのと同じように、マテリアライズ照会表への直接アクセスに対して実施されます。 この点では違いはありません。 マテリアライズ照会表を介して SQL コンパイラーが照会にサービスを提供するとき、マテリアライズ照会表そのものに定義されたラベル・ベースのアクセス制御を実施する必要はありません。 SQL コンパイラーは、適切な基本表からのラベル・ベースのアクセス制御規則を考慮に入れるマテリアライズ照会表を使用します。
  • isolation-clause は、materialized-query-definitionfull-select に指定できません (SQLSTATE 42601)。
  • lock-request-clause を含む副選択ステートメントは、MQT ルーティングの対象になりません。
  • 国別文字データ・タイプは、MBCS データベースでのみ指定できます (SQLSTATE 560AA)。
  • 挿入時クラスタリング (ITC) 表には、次のような制限が適用されます。
    • ITC 表は、SMS 表スペースではサポートされません (SQLSTATE 42838)。
    • ITC 表に対して定義された索引は、SMS 表スペースではサポートされません (SQLSTATE 42838)。

  • まだ存在していないスキーマ名を用いて表を作成すると、 ステートメントの許可 ID に IMPLICIT_SCHEMA 権限がある場合に限り、 そのスキーマが暗黙的に作成されます。 スキーマの所有者は SYSIBM になります。 スキーマに対する CREATEIN 特権が PUBLIC に付与されます。
  • 外部キーが指定されると、
    • 親表の削除を行うパッケージはすべて無効になります。
    • 親キーの少なくとも 1 つの列に対して更新を行うパッケージは、すべて無効になります。
  • 副表を作成すると、表階層内の表のいずれかに従属しているパッケージがすべて無効になります。
  • 参照制約の削除規則または更新規則として NO ACTION または RESTRICT を使用すると、制約が適用されるタイミングは次のように決まります。
    RESTRICT
    削除規則または更新規則は、 CASCADE や SET NULL などの変更規則を伴う参照制約を含む他のすべての制約の前に 適用されます。
    NO ACTION
    削除規則または更新規則は、他の参照制約の後で 適用されます。
    この動作の違いが明白になる例の 1 つとして、 互いに関連する複数の表の UNION ALL として定義されたビューからの行の削除があります。
       Table T1 is a parent of table T3; delete rule as noted below. 
       Table T2 is a parent of table T3; delete rule CASCADE.
       
       CREATE VIEW V1 AS SELECT * FROM T1 UNION ALL SELECT * FROM T2
    
       DELETE FROM V1
    表 T1 が表 T3 の親である場合:
    • 削除規則として RESTRICT を使用する場合、T3 に T1 の親キーの子行が含まれると、制約違反 (SQLSTATE 23001) になります。
    • 削除規則として NO ACTION を使用する場合、T1 からの削除に対して NO ACTION 削除規則が適用される前に T2 から行を削除すると、削除規則 CASCADE によって、その子行が削除される場合があります。 T2 からの削除により、T3 内で T1 の親キーの子行すべてが削除されたわけではない場合は、制約違反 (SQLSTATE 23504) になります。
    戻される SQLSTATE は、 削除規則または更新規則が RESTRICT か NO ACTION かによって異なります。
  • 複数パーティション・データベースのパーティション・グループに対して定義された表スペース内の複数の表の場合、分散キーを選択する際に次のように表コロケーションについて考慮する必要があります。
    • コロケーションのためには、各表は同じデータベース・パーティション・グループにある必要があります。 表スペースは異なっていても構いませんが、同じデータベース・パーティション・グループに定義されている必要があります。
    • コロケーションのためには、各表の分散キーの列の数は同じである必要があり、対応するキー列はデータベース・パーティション互換である必要があります。
    • 分散キーの選択も、結合のパフォーマンスに影響します。 表を別の表と頻繁に結合する場合は、結合する列を両方の表の分散キーにすることを検討してください。
  • 別のソース (別の表やファイル) からのデータを使用して大きな結果セットを作成する必要があり、表のリカバリーが不要な場合は、NOT LOGGED INITIALLY オプションが有用です。 このオプションを使用すると、データのロギングにかかるオーバーヘッドが節減されます。 このオプションを指定する場合、以下の考慮事項が適用されます。
    • 作業単位がコミットされると、 その作業単位の過程で表に対して行われた変更はすべてディスクにフラッシュされます。
    • ロールフォワード・ユーティリティーを実行した際に、データベース中の表にロード・ユーティリティーによってデータが取り込まれたか、 または NOT LOGGED INITIALLY オプションを使用して作成されたことを示すログ記録が見つかると、 表は使用不能としてマークされます。 その後 DROP TABLE ログが見つかると、 表はロールフォワード・ユーティリティーによってドロップされます。 除去しない場合、データベースの回復後に表にアクセスを試みると、 エラーが出されます (SQLSTATE 55019)。 許される唯一の操作は表のドロップです。
    • データベースまたは表スペースのバックアップの一環として、 このような表をバックアップすると、表のリカバリーが可能になります。
  • 照会処理を最適化するためのマテリアライズ照会表の使用: 各種マテリアライズ照会表は、さまざまな制御を使用して照会の処理を最適化します。
    • 以下の各条件が該当する場合は、ENABLE QUERY OPTIMIZATION が定義された REFRESH DEFERRED マテリアライズ照会表を使用して、照会の処理を最適化できます。
      • CURRENT REFRESH AGE が ANY に設定されている。
      • CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION が、マテリアライズ照会表のタイプを格納するように設定されている。
      • CURRENT QUERY OPTIMIZATION が 2 に設定されているか、5 以上の値に設定されている。
      注: CURRENT REFRESH AGE は、MAINTAINED BY FEDERATED_TOOL マテリアライズ照会表への照会ルーティングには影響しません。
    • 以下の各条件が該当する場合は、ENABLE QUERY OPTIMIZATION が定義されたシャドー表を使用して、レプリケーション待ち時間しきい値に基づいて照会の処理を最適化できます。
      • CURRENT REFRESH AGE がゼロまたは ANY 以外の期間に設定されている。
      • CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION が REPLICATION または ALL のみを含むように設定されている。
      • CURRENT QUERY OPTIMIZATION が 2 に設定されているか、5 以上の値に設定されている。
      指定できるゼロ以外の期間値の説明については、 『SET CURRENT REFRESH AGE ステートメント』を参照してください。
    • CURRENT QUERY OPTIMIZATION が 2 に設定されているか 5 以上の値に設定されている場合、ENABLE QUERY OPTIMIZATION が定義された REFRESH IMMEDIATE マテリアライズ照会表は、最適化の際に常に考慮に入れられます。
    • この最適化で、レプリケーション保守ではない REFRESH DEFERRED マテリアライズ照会表または REFRESH IMMEDIATE マテリアライズ照会表を使用できるようにするには、 既に説明した規則に加えて特定の規則に全選択を適合させる必要があります。
      • 全選択には、特殊レジスターまたは特殊レジスターの値に依存する組み込み関数を含めることはできません。
      • 全選択には、グローバル変数を含めることはできません。
      • 全選択には、決定論的でない関数を含めることはできません。
      マテリアライズ照会表の作成時に指定した照会が上記の規則に適合しなければ、 警告が返されます (SQLSTATE 01633)。
  • マテリアライズ照会表が REFRESH IMMEDIATE で定義されている場合、 またはステージング表が PROPAGATE IMMEDIATE で定義されている場合は、 基礎表の挿入、更新、または削除操作によって生じた変更を適用しようとすると、 エラーになる可能性があります。 エラーが発生すると、基礎表の挿入、更新、または削除の操作は失敗します。
  • ロード操作中や SET INTEGRITY ステートメントの実行中など、 制約が大量にチェックされている場合、マテリアライズ照会表やステージング表は使用できません。
  • REFRESH IMMEDIATE で定義されたマテリアライズ照会表、 または REFRESH DEFERRED に関連ステージング表を指定して定義したマテリアライズ照会表によって 参照されている表に対しては、次のような操作を実行することができません。
    • IMPORT REPLACE は使用できません。
    • ALTER TABLE NOT LOGGED INITIALLY WITH EMPTY TABLE は実行できません。
  • フェデレーテッド・システムでは、 リレーショナル・データ・ソースまたはローカル表のニックネームは、 マテリアライズ照会表を作成する基礎表として使用できます。 非リレーショナル・データ・ソースのニックネームは、サポートされていません。 ニックネームが基礎表のうちの 1 つである場合は、REFRESH DEFERRED オプションを使用する必要があります。 パーティション・データベース環境では、 ニックネームを参照するシステム保守のマテリアライズ照会表はサポートされていません。
  • トランザクション開始 ID 列に関する考慮事項: トランザクション開始 ID 列で NULL 値が許可され、行開始列が存在し、その列の値が他のトランザクションで生成された行開始列の値とは異なる固有の値になっている場合、トランザクション開始 ID 列には NULL 値が含まれます。 列に NULL 値が含まれる可能性があるため、その列から値を取り出すときには、以下のいずれかの方式を使用することをお勧めします。
    COALESCE ( transaction_start_id_col,  row_begin_col)
     
    CASE WHEN transaction_start_id_col IS NOT NULL
              THEN transaction_start_id_col 
         ELSE row_begin_col END
  • システム期間テンポラル表の定義: システム期間テンポラル表の定義には、以下が含まれます。
    • SYSTEM_TIME という名前のシステム期間。これは、行開始列と行終了列を使用して定義されます。 AS ROW BEGIN、AS ROW END、および period-definition の説明を参照してください。
    • トランザクション開始 ID 列。 AS TRANSACTION START ID の説明を参照してください。
    • 後続の ALTER TABLE ステートメントで指定される、ADD VERSIONING アクションを指定するシステム期間データ・バージョン管理定義。これには関連履歴表の名前が含まれます。 『ALTER TABLE』の下にある ADD VERSIONING 節の説明を参照してください。
    システム期間テンポラル表をドロップするときに履歴表が暗黙的にドロップされることがないように、履歴表の定義で WITH RESTRICT ON DROP 節を使用します。 RESTRICT ON DROP 属性が ALTER TABLE ステートメントによって削除される場合にのみ、履歴表を手動でドロップできます。
  • アプリケーション期間のテンポラル表の定義: アプリケーション期間のテンポラル表の定義には、BUSINESS_TIME という名前のアプリケーション期間が含まれます。 アプリケーション期間は、開始タイム・スタンプ列と終了列を使用して定義されます。 period-definition の説明を参照してください。

    アプリケーション期間のテンポラル表に対してデータ変更操作を行うと、行が更新または削除されるときに、1、2 行の追加行が自動的に挿入される場合があります。 アプリケーション期間のテンポラル表のある行で示される期間の一部分に対して行の更新または削除を指定すると、その行は更新または削除され、その行の変更されない部分を示す行が 1、2 行が自動的に挿入されます。 表に対する更新操作または削除操作の結果として自動的に挿入される行ごとに、アプリケーション期間のテンポラル表に対して生成される各列に新規の値が生成されます。 生成される列がユニーク・キー、主キー、参照制約の親キー、またはユニーク索引の一部として定義される場合、自動挿入によって制約または索引に違反する可能性があり、その場合にはエラーが返されます。

  • 暗黙的な非表示列に関する考慮事項: 暗黙的な非表示列が含まれる表を作成すると、その表を作業対象とするデータ移動ユーティリティーの動作に影響を及ぼす可能性があります。 表に暗黙的な非表示列が含まれる場合、IMPORT、INGEST、LOAD などのユーティリティーでは、非表示列のデータを対象の操作に含めるかどうかをユーザーが指定する必要があります。 例えば、非表示列がまったくない表に対してロード操作が正常に実行できても、暗黙的な非表示列が含まれる表に対して実行すると障害が発生する場合があります (SQLCODE SQL2437N)。 同様に、EXPORT の場合も、非表示列のデータを操作に含めるかどうかをユーザーが指定する必要があります。

    暗黙的な非表示列を含む表を処理する場合、データ移動ユーティリティーは DB2_DMU_DEFAULT レジストリー変数、またはimplicitlyhiddenincludeまたはimplicitlyhiddenmissingファイル・タイプ修飾子を使用する必要があります。

  • 透過 DDL: フェデレーテッド・システムでは、 Db2 SQL を使用して、リモート基本表を作成、変更、またはドロップできます。 この機能は、透過 DDL として知られています。 リモート基本表がデータ・ソース上に作成される前に、 フェデレーテッド・サーバーはそのデータ・ソースへアクセスするように構成されなければなりません。 この構成には、データ・ソースのラッパーの作成、リモート基本表を置くサーバーの サーバー定義の指定、フェデレーテッド・サーバーとデータ・ソース間の ユーザー・マッピングの作成が含まれます。
    CREATE TABLE ステートメントに含むことができるものに関して、 透過 DDL には以下のようないくつかの制約があります。
    • 列および主キーのみがリモート基本表に作成可能です。
    • 透過 DDL によってサポートされる節には、具体的には以下のものがあります。
      • element-list 節の中の column-definitionunique-constraint
      • column-options 節の中の NOT NULL と PRIMARY KEY
      • OPTIONS
    • リモート・データ・ソースは次のものをサポートする必要があります。
      • データベース列データ・タイプがマップされるリモート列データ・タイプ
      • CREATE TABLE ステートメントにおける主キー・オプション
      データ・ソースの、サポートしていない要求への応答方法によって、 エラーが戻されるか、または要求が無視される可能性があります。

    リモート基本表が透過 DDL を使用して作成された場合、 そのリモート基本表に対してニックネームが自動的に作成されます。

  • 親表または従属表が表階層の一部を成すように参照制約を定義することができます。 そのような状況では、参照制約による影響は、ステートメントのタイプによって次のように異なります。
    1. INSERT、UPDATE、DELETE の各ステートメントに制約を定義することによって、従属表 (またはそのいずれかの副表) の各行に非 NULL の外部キーがある場合、その親表 (またはそのいずれかの副表) に、一致する親キーを持つ行が確実に存在するようになります。 アクションの開始方法に関係なく、この規則は、いずれかの表の行に影響を与えるすべてのアクションに対して適用されます。
    2. DROP TABLE ステートメントでは次のように処理されます。
      • ドロップされる表が親表または従属表である場合、制約はドロップされます。
      • ドロップされる表のスーパー表が親表である場合、ドロップされる表の行は、スーパー表からも削除対象となります。 参照制約が検査されて、削除行ごとに削除規則が呼び出されます。
      • ドロップされる表のスーパー表が従属表である場合、制約は検査されません。 従属表から行を削除しても、参照制約違反にはなりません。
  • 特権: 表が作成されると、その表の定義者には CONTROL 特権が付与されます。 副表が作成されると、各ユーザーまたはグループが持っているそのすぐ上のスーパー表に対する SELECT 特権が副表に対しても自動的に付与され、 その場合は表定義者から特権が付与されたことになります。
  • 行サイズの制限: 行オーガナイズ 表の行で許可される最大バイト数は、表が作成される表スペースのページ・サイズ (tablspace-name1) によって異なります。 次の表では、各表スペースのページ・サイズに関連した行サイズの制限と列数の制限を示します。
    表 3. 各表スペースのページ・サイズの列数および行サイズの制限 (行オーガナイズ 表)
    ページ・サイズ 行サイズの制限 列数の制限
    4K 4005 500
    8K 8101 1012
    16K 16,293 1012
    32K 32,677 1012
    行オーガナイズ 表の実際の列数は、以下の式によってさらに制限できます。
       Total Columns * 8 + Number of LOB Columns * 12 <=
         Row Size Limit for Page Size

    カラム・オーガナイズ 表は、ページ・サイズに関係なく最大 1012 列を持つことができます。列のバイト・カウントは 32,677 を超えてはなりません。

  • バイト・カウント: 次の表は、列のバイト・カウントを、列のデータ・タイプ別に示したものです。 これは、行サイズの計算に使用します。 バイト・カウントは VALUE COMPRESSION がアクティブかどうかによって異なります。 VALUE COMPRESSION がアクティブでない場合には、バイト・カウントは列が NULL 可能であるかどうかによっても異なります。 表示される バイト・カウントは、行圧縮が有効になっていない場合のバイト・カウントです。 行圧縮がアクティブな場合、行に使用されている合計バイト数は、通常、非圧縮バージョンの行の合計バイト数より小さくなり、大きくなることはありません。

    表が構造化タイプに基づいている場合には、副表が定義されているか否かにかかわらず、 副表の行を識別するために 4 バイトのオーバーヘッドが確保されます。 さらに、追加される副表列は、NULL 不可と定義されている場合でも、 バイト・カウントのために必ず NULL 可能として考慮されます。

    表 4. データ・タイプごとの列のバイト・カウント
    データ・タイプ VALUE COMPRESSION がアクティブ 1 VALUE COMPRESSION がアクティブでない
    列が NULL 可能 列が NULL 可能でない
    SMALLINT 4 3 2
    INTEGER 6 5 4
    BIGINT 10 9 8
    REAL 6 5 4
    DOUBLE 10 9 8
    DECIMAL (p/2)+3 の整数部分 (p は精度) (p/2)+2 の整数部分 (p は精度) (p/2)+1 の整数部分 (p は精度)
    DECFLOAT(16) 10 9 8
    DECFLOAT(34) 18 17 16
    CHAR (n) n+ 2 n+ 1 n
    VARCHAR (n) n+ 2 n+5 (表内) n+4 (表内)
    LONG VARCHAR2 22 25 24
    BINARY n+ 2 n+ 1 n
    VARBINARY n+ 2 n+5 (表内) n+4 (表内)
    GRAPHIC (n) n* 2 + 2 n* 2 + 1 n* 2
    VARGRAPHIC (n) n* 2 + 2 n*2+5 (表内) n*2+4 (表内)
    長い VARGRAPHIC2 22 25 24
    日数 6 5 4
    時刻 5 4 3
    タイム・スタンプ (p) (p+1)/2+9 の整数部分 (p は秒未満の精度) (p+1)/2+8 の整数部分 (p は秒未満の精度) (p+1)/2+7 の整数部分 (p は秒未満の精度)
    BOOLEAN 3 2 1
    XML (INLINE LENGTH が指定されない場合) 82 85 84
    XML (INLINE LENGTH が指定される場合) INLINE LENGTH +2 INLINE LENGTH +4 INLINE LENGTH +3
    LOB3 の最大長 1024 (INLINE LENGTH が指定されない場合) 70 73 72
    LOB の最大長 8192 (INLINE LENGTH が指定されない場合) 94 97 96
    LOB の最大長 65,536 (INLINE LENGTH が指定されない場合) 118 121 120
    LOB の最大長 524,000 (INLINE LENGTH が指定されない場合) 142 145 144
    LOB の最大長 4,190,000 (INLINE LENGTH が指定されない場合) 166 169 168
    LOB の最大長 134,000,000 (INLINE LENGTH が指定されない場合) 198 201 200
    LOB の最大長 536,000,000 (INLINE LENGTH が指定されない場合) 222 225 224
    LOB の最大長 1,070,000,000 (INLINE LENGTH が指定されない場合) 254 257 256
    LOB の最大長 1,470,000,000 (INLINE LENGTH が指定されない場合) 278 281 280
    LOB の最大長 2,147,483,647 (INLINE LENGTH が指定されない場合) 314 317 316
    INLINE LENGTH が指定されている LOB INLINE LENGTH +2 INLINE LENGTH +5 INLINE LENGTH +4

    1 その行の VALUE COMPRESSION がアクティブの場合には、行ごとに使用される 2 バイトの追加ストレージがあります。

    2LONG VARCHAR および LONG VARGRAPHIC データ・タイプは推奨されておらず、今後のリリースでは除去される可能性があります。

    3 各 LOB 値は、その基底レコードに、実際の値の位置へのポインターとなる LOB 記述子 を持っています。 その記述子のサイズは、列に定義されている最大長によって異なります。 LOB 列の INLINE LENGTH を指定しない場合は、インライン長のデフォルト値として、記述子のサイズが使用されます。

    LOB 列のバイト・カウントを判別するとき、データの一時スペースやソートを必要とするインセンシティブ・カーソル、両方向スクロール・カーソル、および他の照会のために生成される可能性のある SYSTEM TEMPORARY 表の一部に LOB 列がある場合は、余分のバイトを考慮する必要があります。 必要な余分のバイト数は、特定の照会によっては、70 バイトになることもあります。 ページ・サイズの行の最大長に基本表が近い場合は、使用可能な最大 SYSTEM TEMPORARY 表スペースに SYSTEM TEMPORARY 表が収まらなければ、照会の処理中にエラーが戻されることがあります。 ページ・サイズが 32K の既存の SYSTEM TEMPORARY 表スペースが使用可能な場合は、可能であれば拡張行サイズ・サポートが使用されます。

    特殊タイプ の場合、 バイト・カウントは特殊タイプのソース・タイプの長さに相当します。 参照タイプ の場合には、 バイト・カウントは、参照タイプの基礎となる組み込みデータ・タイプの長さに相当します。 構造化タイプの場合、バイト・カウントは INLINE LENGTH + 4 に相当します。 INLINE LENGTH は、 column-options 節の列に指定された値 (または暗黙的に計算された値) です。

    以下のサンプル表の行サイズは、VALUE COMPRESSION が指定されていないと想定しています。
    DEPARTMENT 63 (0 + 3 + 33 + 7 +  3 + 17)
    ORG        57 (0 + 3 + 19 + 2 + 15 + 18)
    VALUE COMPRESSION が指定された場合には、行サイズが次のように変更されます。
    DEPARTMENT 69 (2 + 5 + 31 + 8 +  5 + 18)
    ORG        53 (2 + 4 + 16 + 4 + 12 + 15)
    拡張行サイズが含まれた表の最小ページ・サイズ要件: 拡張行サイズがサポートされた表にデータ行が挿入されるか、またはその表内のデータ行が更新された場合、 物理データ行の長さがその表スペースの最大レコード長を超えていると、可変長ストリングの列 (VARCHAR または VARGRAPHIC) のサブセットは、このデータ行の外部の ラージ・オブジェクト (LOB) データとして格納されます。 ベースの行内の表列は、サイズが 24 バイトの記述子で置換されます。 すべての VARCHAR または VARGRAPHIC のデータがデータ行の外部に格納されるような極端な場合に対応するために、データベース・マネージャーでは、 以下の方法を使用して最小の行サイズを計算します。
    • VARCHAR(n) 列の n > 24 のすべての列を、それが VARCHAR(24) であるかのように処理する
    • VARGRAPHIC(m) 列の m > 12 のすべての列を、それが VARGRAPHIC(12) であるかのように処理する
    この値は、『データ・タイプごとの列のバイト・カウント』表を使用して計算されます。 計算された結果は、次に拡張行サイズが含まれた表を作成可能なページ・サイズの下限を探すために使用されます。
  • ストレージ・バイト・カウント: 以下の各表は、 列のストレージ・バイト・カウントを、データ値のデータ・タイプ別に示したものです。

    最初の表に、属性のセットの定義を示しています。 2 番目の表では、これらの属性を参照して、各データ・タイプのバイト・カウントの詳細を示しています。

    バイト・カウントは VALUE COMPRESSION がアクティブかどうかによって異なります。 VALUE COMPRESSION がアクティブでない場合には、バイト・カウントは列が NULL 可能であるかどうかによっても異なります。 表の値は、値を保管するために使用されるストレージ量 (バイト単位) を表します。 表示される バイト・カウントは、行圧縮が有効になっていない場合のバイト・カウントです。 行圧縮がアクティブな場合、行に使用されている合計バイト数は、通常、非圧縮バージョンの行の合計バイト数より小さくなり、大きくなることはありません。

    表 5. 関連表で参照されている基準の定義
    事例 データ値 VALUE COMPRESSION 列の NULL 可能性
    A ヌル アクティブでない NULL 可能
    B ヌル アクティブ 2 NULL 可能
    C 長さゼロ アクティブ 2 適用外
    D システム・デフォルト1 アクティブ 2 適用外
    E 他のすべてのデータ値 アクティブでない NULL 可能
    F 他のすべてのデータ値 アクティブでない NULL 可能でない
    G 他のすべてのデータ値 アクティブ 2 適用外

    1 列に対して COMPRESS SYSTEM DEFAULT が指定される場合。

    2 その行の VALUE COMPRESSION がアクティブの場合には、行ごとに使用される 2 バイトの追加ストレージがあります。

    表 6. 行形式、データ・タイプ、およびデータ値ベースのストレージ・バイト・カウント
    データ・タイプ ケース A ケース B ケース C ケース D ケース E ケース F ケース G
    SMALLINT 3 3 - 3 3 2 4
    INTEGER 5 3 - 3 5 4 6
    BIGINT 9 3 - 3 9 8 10
    REAL 5 3 - 3 5 4 6
    DOUBLE 9 3 - 3 9 8 10
    DECIMAL (p/2)+2 の整数部分 (p は精度) 3 - 3 (p/2)+2 の整数部分 (p は精度) (p/2)+1 の整数部分 (p は精度) (p/2)+3 の整数部分 (p は精度)
    DECFLOAT(16) 9 3 - 3 9 8 10
    DECFLOAT(34) 17 3 - 3 17 16 18
    CHAR (n) n+ 1 3 - 3 n+ 1 n n+ 2
    VARCHAR (n) 5 3 2 2 N+5 (N はデータ内のバイト数) N+4 (N はデータ内のバイト数) N+2 (N はデータ内のバイト数)
    LONG VARCHAR2 5 3 2 2 25 24 22
    BINARY n+ 1 3 - 3 n+ 1 n n+ 2
    VARBINARY 5 3 2 2 N+5 (N はデータ内のバイト数) N+4 (N はデータ内のバイト数) N+2 (N はデータ内のバイト数)
    GRAPHIC (n) n* 2 + 1 3 - 3 n* 2 + 1 n* 2 n* 2 + 2
    VARGRAPHIC (n) 5 3 2 2 N*2+5 (N はデータ内のバイト数) N*2+4 (N はデータ内のバイト数) N*2+2 (N はデータ内のバイト数)
    長い VARGRAPHIC2 5 3 2 2 25 24 22
    日数 5 3 - - 5 4 6
    時刻 4 3 - - 4 3 5
    タイム・スタンプ (p) (p+1)/2+8 の整数部分 (p は秒未満の精度) 3 - - (p+1)/2+8 の整数部分 (p は秒未満の精度) (p+1)/2+7 の整数部分 (p は秒未満の精度) (p+1)/2+9 の整数部分 (p は秒未満の精度)
    BOOLEAN 2 2 - 2 2 1 3
    LOB1 の最大長 1024 5 3 2 2 (60 から 68)+5 (60 から 68)+4 (60 から 68)+2
    LOB の最大長 8192 5 3 2 2 (60 から 92)+5 (60 から 92)+4 (60 から 92)+2
    LOB の最大長 65,536 5 3 2 2 (60 から 116)+5 (60 から 116)+4 (60 から 116)+2
    LOB の最大長 524,000 5 3 2 2 (60 から 140)+5 (60 から 140)+4 (60 から 140)+2
    LOB の最大長 4,190,000 5 3 2 2 (60 から 164)+5 (60 から 164)+4 (60 から 164)+2
    LOB の最大長 134,000,000 5 3 2 2 (60 から 196)+5 (60 から 196)+4 (60 から 196)+2
    LOB の最大長 536,000,000 5 3 2 2 (60 から 220)+5 (60 から 220)+4 (60 から 220)+2
    LOB の最大長 1,070,000,000 5 3 2 2 (60 から 252)+5 (60 から 252)+4 (60 から 252)+2
    LOB の最大長 1,470,000,000 5 3 2 2 (60 から 276)+5 (60 から 276)+4 (60 から 276)+2
    LOB の最大長 2,147,483,647 5 3 2 2 (60 から 312)+5 (60 から 312)+4 (60 から 312)+2
    XML 5 3 - - 85 84 82

    1 列に対して COMPRESS SYSTEM DEFAULT が指定される場合。

    2LONG VARCHAR および LONG VARGRAPHIC データ・タイプは推奨されておらず、今後のリリースでは除去される可能性があります。

  • ディメンション列: ディメンション列の個別の値はそれぞれ表の異なるブロックに割り当てられるため、 INTEGER(ORDER_DATE)/100 のように式のクラスタリングが望ましい場合があります。 この場合、生成列を表に定義することができ、その後この生成列は ORGANIZE BY DIMENSIONS 節で使用できます。 式が表の列に関連して単調な場合には、この列の範囲述部を満たすためにデータベースによってディメンション索引が使用される可能性があります。 例えば、式が単に column-name + some-positive-constant の場合には、 これは単調な増加です。 ユーザー定義関数、特定の組み込み関数、および 1 つの式で複数の列を使用すると、単調化やその検出が防げられます。

    非単調な式を持つ、または単調化を識別できない、生成列に関係するディメンションを作成できますが、 スライスの範囲照会やこうしたディメンションのセル境界はサポートされません。 同等性および IN 述部は、スライスまたはセルによって処理できます

    生成された関数 fn に関係して以下の事柄が真の場合には、生成列は単調です。

    • 単調な増加。
      値 x1 および x2 のペアのすべての可能性において、x2>x1 ならば fn(x2)>fn(x1) となります。 以下に例を示します。
         SALARY - 10000
    • 単調な減少。
      値 x1 および x2 のペアのすべての可能性において、x2>x1 ならば fn(x2)<fn(x1) となります。 以下に例を示します。
         -SALARY
    • 単調な非減少。
      値 x1 および x2 のペアのすべての可能性において、x2>x1 ならば fn(x2)>=fn(x1) となります。 以下に例を示します。
         SALARY/1000
    • 単調な非増加。
      値 x1 および x2 のペアのすべての可能性において、x2>x1 ならば fn(x2)<=fn(x1) となります。 以下に例を示します。
         -SALARY/1000

    PRICE*DISCOUNT は、表の複数の列に関係しているため、単調ではありません。

  • 範囲がクラスター化された表: キー・シーケンスによる表の編成は、特定のタイプの表に対して効果があります。 表は、有効な値の範囲上で高密度にクラスター化された整数キーを持っている必要があります。 この整数キーの列は、NULL 可能であってはならず、キーは論理的に表の主キーでなければなりません。 範囲がクラスター化された表の編成では、キー値によって指定された行や、 キー値の範囲で指定された一定範囲の行に対する直接アクセスを提供しているため、 別個のユニーク索引オブジェクトを必要としません。 定義されたキー・シーケンスの範囲内にある行の完全セットに対するすべてのスペースの割り振りは、 表の作成時に行われ、範囲がクラスター化された表を定義する際に考慮される必要があります。 最初の時点で行に削除のマークが付いていたとしても、 ストレージ・スペースを他の用途に使用することはできません。 キー・シーケンスの範囲全体が、長期間にわたってデータのみを追加するためのものである場合、この表編成は適切な選択とはならないことがあります。
  • 表は最大で 1 つのセキュリティー・ポリシーしか持つことができません。
  • 保護対象表に定義されている参照整合性制約が適用されます。 この場合の制約違反は、デバッグするのが難しい場合があります。該当するセキュリティー・ラベルや免除資格情報がない場合、データベース・マネージャーでは、違反を引き起こした行を確認できないからです。
  • 表の列の順序を定義するときは、更新の際のログ対象データ量が最小になるように、頻繁に更新される列は定義の末尾に配置するようにしてください。 ROW CHANGE TIMESTAMP 列はこれに該当します。 ROW CHANGE TIMESTAMP 列は、行の更新ごとに必ず更新されるようになっています。
  • セキュリティーとレプリケーション: レプリケーションによって、保護対象表のデータ行がデータベースの外部に複製されることがあります。 データベースの外部にあるデータは保護できないため、保護対象表のレプリケーションをセットアップするときには、慎重な作業が必要です。
  • 複数パーティションまたは Db2 pureScale 環境に関する考慮事項:
    • CACHE オプションと NO ORDER オプションが有効になっていると、複数のキャッシュが同時にアクティブになることがあります。 これは、複数パーティション または Db2 pureScale 環境の各メンバーで発生する可能性があります。 異なる メンバー からの次の値割り当ての要求では、厳密な数値順に値が割り当てられない場合があります。 例えば、複数パーティション または Db2 pureScale 環境で、 メンバー DB1A と DB1B が同じシーケンスを使用し、 DB1A が 1 から 20 の範囲のキャッシュ値を取得し、 DB1B が 21 から 40 の範囲のキャッシュ値を取得するとします。 このシナリオで、最初に DB1A が次の値を要求し、次に DB1B が要求し、その後 DB1A が再度要求すると、割り当てられる値の実際の順序は 1、21、2 になります。 したがって、同じシーケンスを同時に使用する複数の メンバー 間で、シーケンス番号が厳密な数値順に生成されることを保証するには、ORDER オプションを指定します。
    • Db2 pureScale 環境で ORDER オプションまたは NO CACHE オプションを使用すると、複数の メンバー でアプリケーションによって共有されるシーケンスに割り当てられる値が厳密な数値順になります。 Db2 pureScale 環境では、ORDER を指定すると、CACHE n を指定しても NO CACHE が暗黙指定されます。
  • 行と列のアクセス制御 (RCAC) に関する考慮事項: ACTIVATE ROW ACCESS CONTROL、ACTIVATE COLUMN ACCESS CONTROL、DEACTIVATE ROW ACCESS CONTROL、および DEACTIVATE COLUMN ACCESS CONTROL の各節はサポートされません。 表の行レベルまたは列レベルのアクセス制御をアクティブまたは非アクティブにするときには、ALTER TABLE ステートメントを使用します。
  • カラム・オーガナイズ 表に関する考慮事項: 自動ストレージ表スペースのみに カラム・オーガナイズ 表を作成します。
    以下のオプションは、 カラム・オーガナイズ 表ではサポートされません (下線付きオプションはデフォルトです)。 ただし、 カラム・オーガナイズ 表と同じデータベースおよびワークロードで使用される 行オーガナイズ 表に対して指定できます。
    • ORGANIZE BY {DIMENSIONS | KEY SEQUENCE | INSERT TIME}
    • DATA CAPTURE CHANGES
    • VALUE COMPRESSION
    • COMPRESS YES [ADAPTIVE | STATIC]
    • COMPRESS NO
    • PARTITION BY RANGE
    • FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
    • CREATE TABLE OF <type-name1> (型付き表を作成する場合)
    • PROPAGATE IMMEDIATE
    • CHECK
    • DETERMINED BY

    構造化タイプの列はサポートされていません。

    カラム・オーガナイズ 表の列は、以下のいずれかのデータ・タイプでなければなりません。
    • SMALLINT
    • INTEGER
    • BIGINT
    • DECIMAL
    • REAL
    • DOUBLE
    • DECFLOAT
    • CHAR (FOR BIT DATA を含む)
    • VARCHAR (FOR BIT DATA を含む)
    • BINARY
    • VARBINARY
    • GRAPHIC
    • VARGRAPHIC
    • 日数
    • 時刻
    • タイム・スタンプ (n)
    • BOOLEAN
    • CLOB
    • BLOB
    • DBCLOB
    • NCLOB
    • サポートされているデータ・タイプの特殊タイプ

代替構文

以下の代替構文は標準ではありません。 これらは、旧バージョンの製品や他のデータベース製品との互換性を保持するためにサポートされています。
  • 以下の構文はデフォルトの振る舞いとして受け入れられます。
    • IN database-name.tablespace-name
    • IN DATABASE database-name
    • FOR MIXED DATA
    • FOR SBCS DATA
  • PARTITION の代わりに PART を指定できます。
  • PARTITION partition-name の代わりに PARTITION partition-number を指定できます。 partition-number では、CREATE TABLE ステートメントで既に指定されているパーティションを指定することはできません。 partition-number を指定しない場合は、データベース・マネージャーによって固有のパーティション番号が生成されます。
  • ENDING AT の代わりに VALUES を指定できます。
  • CONSTRAINT キーワードは、参照節を定義する column-definition から省略できます。
  • constraint-name (制約名) を FOREIGN KEY に続けて (CONSTRAINT キーワードなし) 指定することができます。
  • SUMMARY は CREATE の後に任意に指定できます。
  • WITH NO DATA の代わりに DEFINITION ONLY を指定できます。
  • DISTRIBUTE BY の代わりに PARTITIONING KEY を指定できます。
  • REPLICATION オプションではなく HASH オプションを後ろに指定する場合は、DISTRIBUTE BY の代わりに DISTRIBUTE ON を指定できます。
  • DISTRIBUTE BY REPLICATION の代わりに REPLICATED を指定できます。
  • identity-options 節では、コンマを使って複数のオプションを分離することができます。
  • NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE、および NO ORDER の代わりにそれぞれ、NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE および NOORDER を指定できます。
  • ADD は、table-option-name string-constant の前に指定できます。
  • 日時特殊レジスターの値を指定する場合は、CURRENT_TIMESTAMP の代わりに NOW() を指定できます。

  1. DEPARTX 表スペースに表 TDEPT を作成します。 DEPTNO、 DEPTNAME、 MGRNO、および ADMRDEPT は列の名前です。 CHAR は、列が文字データを含むことを意味しています。 NOT NULL は、列に NULL 値を含めることができないことを示します。 VARCHAR は、列のデータが可変長文字データであることを意味します。 主キーは、列 DEPTNO で構成されます。
       CREATE TABLE TDEPT
         (DEPTNO   CHAR(3)     NOT NULL,
          DEPTNAME VARCHAR(36) NOT NULL,
          MGRNO    CHAR(6),
          ADMRDEPT CHAR(3)     NOT NULL,
          PRIMARY KEY(DEPTNO))
       IN DEPARTX
  2. SCHED 表スペースに表 PROJ を作成します。 PROJNO、 PROJNAME、 DEPTNO、 RESPEMP、 PRSTAFF、 PRSTDATE、 PRENDATE、 および MAJPROJ は列の名前です。 CHAR は、列が文字データを含むことを意味しています。 DECIMAL は、列のデータがパック 10 進数データであることを意味します。 5,2 の 5 は 10 進数の桁数、2 は小数点以下の桁数を示します。 NOT NULL は、列に NULL 値を含めることができないことを示します。 VARCHAR は、列のデータが可変長文字データであることを意味します。 DATE は、列のデータが 3 つの部分からなる形式 (年、月、日) の日付情報であることを示しています。
       CREATE TABLE PROJ
         (PROJNO   CHAR(6)      NOT NULL,
          PROJNAME VARCHAR(24)  NOT NULL,
          DEPTNO   CHAR(3)      NOT NULL,
          RESPEMP  CHAR(6)      NOT NULL,
          PRSTAFF  DECIMAL(5,2)         ,
          PRSTDATE DATE                 ,
          PRENDATE DATE                 ,
          MAJPROJ  CHAR(6)      NOT NULL)
       IN SCHED
  3. 不明な給与が 0 と見なされる EMPLOYEE_SALARY という表を作成します。 表スペースが指定されていないので、IN tablespace-name 節について記述された規則に基づいてシステムが選択した表スペースに表が作成されます。
       CREATE TABLE EMPLOYEE_SALARY
         (DEPTNO   CHAR(3)      NOT NULL,
          DEPTNAME VARCHAR(36)  NOT NULL,
          EMPNO    CHAR(6)      NOT NULL,
          SALARY   DECIMAL(9,2) NOT NULL WITH DEFAULT)
  4. 給与 (SALARY) と距離 (MILES) の合計用の特殊タイプを作成し、デフォルト表スペースに作成される表の列として使用します。 動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは JOHNDOE であり、CURRENT PATH はデフォルト (SYSIBMSYSFUNJOHNDOE) であると想定しています。
    SALARY の値の指定がない場合には、それを 0 に設定します。 また、LIVING_DIST の値の指定がない場合には、それを 1 マイルに設定します。
       CREATE TYPE JOHNDOE.T_SALARY AS INTEGER
    
       CREATE TYPE JOHNDOE.MILES  AS FLOAT
    
       CREATE TABLE EMPLOYEE
         (ID          INTEGER NOT NULL,
          NAME        CHAR (30),
          SALARY      T_SALARY NOT NULL WITH DEFAULT,
          LIVING_DIST MILES    DEFAULT MILES(1) )
  5. 画像 (IMAGE) と音声 (AUDIO) 用の特殊タイプを作成し、表の列として使用します。 表スペースが指定されていないので、IN tablespace-name 節について記述された規則に基づいてシステムが選択した表スペースに、 表が作成されます。 CURRENT PATH はデフォルト値であると想定します。
       CREATE TYPE IMAGE AS BLOB (10M)
       
       CREATE TYPE AUDIO AS BLOB (1G)
    
       CREATE TABLE PERSON
         (SSN    INTEGER NOT NULL,
          NAME   CHAR (30),
          VOICE  AUDIO,
          PHOTO  IMAGE)
  6. HUMRES 表スペースに表 EMPLOYEE を作成します。 表には、次のような制約を定義します。
    • 部門番号 (DEPT) の値は、10 から 100 の範囲でなければならない。
    • 従業員の職務は、 販売マネージャー、または 事務員のいずれかに限られます。
    • 1986 年以降の従業員の給与 (SALARY) はすべて $40,500 を超えていなければならない。
    注: チェック制約に含まれる列が NULL 可能な場合は、NULL になることもあります。
       CREATE TABLE EMPLOYEE
         (ID          SMALLINT NOT NULL,
          NAME        VARCHAR(9),
          DEPT        SMALLINT CHECK (DEPT BETWEEN 10 AND 100),
          JOB         CHAR(5) CHECK (JOB IN ('Sales','Mgr','Clerk')),
          HIREDATE    DATE,
          SALARY      DECIMAL(7,2),
          COMM        DECIMAL(7,2),
          PRIMARY KEY (ID),
          CONSTRAINT  YEARSAL CHECK (YEAR(HIREDATE) > 1986
            OR SALARY > 40500)
         )
         IN HUMRES
  7. PAYROLL 表スペースに全体が含まれる表を作成します。
       CREATE TABLE EMPLOYEE .....
         IN PAYROLL
  8. データ部分が ACCOUNTING にあり、索引部分が ACCOUNT_IDX にある表を作成します。
       CREATE TABLE SALARY.....
         IN ACCOUNTING INDEX IN ACCOUNT_IDX
  9. 表を作成して、SQL の変更内容をデフォルトのフォーマットでログ記録します。
       CREATE TABLE SALARY1 .....
    または
       CREATE TABLE SALARY1 .....
         DATA CAPTURE NONE
  10. 表を作成して、SQL の変更内容を拡張フォーマットでログ記録します。
       CREATE TABLE SALARY2 .....
         DATA CAPTURE CHANGES
  11. SCHED 表スペースに表 EMP_ACT を作成します。 EMPNO、PROJNO、ACTNO、EMPTIME、 EMSTDATE、および EMENDATE は列の名前です。 表には、次のような制約を定義します。
    • すべての行の列セット、EMPNO、PROJNO、および ACTNO の値は、固有でなければならない。
    • PROJNO の値は、PROJECT 表の PROJNO 列の既存の値と一致していなければならず、 プロジェクトが削除される場合、 そのプロジェクトを参照する EMP_ACT の行もすべて削除される。
       CREATE TABLE EMP_ACT
         (EMPNO       CHAR(6) NOT NULL,
          PROJNO      CHAR(6) NOT NULL,
          ACTNO       SMALLINT NOT NULL,
          EMPTIME     DECIMAL(5,2),
          EMSTDATE    DATE,
          EMENDATE    DATE,
          CONSTRAINT EMP_ACT_UNIQ UNIQUE (EMPNO,PROJNO,ACTNO),
          CONSTRAINT FK_ACT_PROJ FOREIGN KEY (PROJNO)
                                 REFERENCES PROJECT (PROJNO) ON DELETE CASCADE
         )
         IN SCHED
    ユニーク制約を課すために、 EMP_ACT_UNIQ という名前のユニーク索引が同じスキーマ内に自動的に作成されます。
  12. アイス・ホッケーの殿堂に入る、有名なゴールについての情報を保持する表を作成します。 この表には、ゴールをきめたホッケー選手の名前、 ゴールをきめられたゴールキーパーの名前、日付、 ゴールについての説明文などの情報がリストされます。 説明列は NULL 可能です。
       CREATE TABLE HOCKEY_GOALS
         ( BY_PLAYER      VARCHAR(30)   NOT NULL,
           BY_TEAM        VARCHAR(30)   NOT NULL,
           AGAINST_PLAYER VARCHAR(30)   NOT NULL,
           AGAINST_TEAM   VARCHAR(30)   NOT NULL,
           DATE_OF_GOAL   DATE          NOT NULL,
           DESCRIPTION    CLOB(5000) )
  13. EMPLOYEE 表に例外表が必要であるとします。 これは、以下のステートメントを使用して作成できます。
       CREATE TABLE EXCEPTION_EMPLOYEE AS
         (SELECT EMPLOYEE.*,
           CURRENT TIMESTAMP AS TIMESTAMP,
           CAST ('' AS CLOB(32K)) AS MSG
         FROM EMPLOYEE
         ) WITH NO DATA
  14. 次に示されている属性を持つ以下のような表スペースがあるとします。
       TBSPACE            PAGESIZE    USER   USERAUTH
       ------------------ ----------- ------ --------
       DEPT4K                    4096 BOBBY  Y
       PUBLIC4K                  4096 PUBLIC Y
       DEPT8K                    8192 BOBBY  Y
       DEPT8K                    8192 RICK   Y
       PUBLIC8K                  8192 PUBLIC Y
    • RICK が以下のような表を作成した場合、バイト・カウントは 4005 未満なので、 その表は表スペース PUBLIC4K に入れられます。しかし BOBBY が同じ表を作成した場合、明示的な権限付与があって BOBBY は USE 特権を保有しているので、その表は表スペース DEPT4K に入れられます。
         CREATE TABLE DOCUMENTS
           (SUMMARY    VARCHAR(1000),
            REPORT     VARCHAR(2000))
    • BOBBY が以下のような表を作成した場合、バイト・カウントは 4005 を超え、また、明示的な権限付与によって BOBBY は USE 特権を保有しているので、その表は表スペース DEPT8K に入れられます。 しかし DUNCAN が同じ表を作成すると、それは表スペース PUBLIC8K に入れられます。 DUNCAN には該当する特権がないからです。
         CREATE TABLE CURRICULUM
           (SUMMARY    VARCHAR(1000),
            REPORT     VARCHAR(2000),
            EXERCISES  VARCHAR(1500))
  15. 構造化タイプ EMP を使って定義された LEAD 列を持つ表を作成します。 LEAD 列に 300 バイトの INLINE LENGTH を指定します。 これは、300 バイト以内に収まらない LEAD のインスタンスをすべて、 その表以外に (LOB 値の処理方法と同様に、基本表の行とは別個に) 保管することを指示します。
       CREATE TABLE PROJECTS (PID INTEGER,
         LEAD EMP INLINE LENGTH 300,
         STARTDATE DATE,
                   ...)
  16. DEPTNO、DEPTNAME、MGRNO、ADMRDEPT、 および LOCATION という名前の 5 つの列を持つ表 DEPT を作成します。 列 DEPT を IDENTITY 列として定義して、その値が常に生成されるようにします。 DEPT 列の値は、500 から始まり、1 ずつ増分するようにします。
       CREATE TABLE DEPT
         (DEPTNO     SMALLINT      NOT NULL
                        GENERATED ALWAYS AS IDENTITY
                          (START WITH 500, INCREMENT BY 1),
          DEPTNAME   VARCHAR(36)   NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT   SMALLINT      NOT NULL,
          LOCATION   CHAR(30))
  17. YEAR 列で配分され、 REGION および YEAR 列にディメンションを持つ SALES 表を作成します。 データは、YEAR 列のハッシュ値に従って、各データベース・パーティションに配分されています。 各データベース・パーティションで、それらのデータベース・パーティション上の REGION および YEAR 列の値の固有な組み合わせを基にして、 データはエクステントに編成されます。
       CREATE TABLE SALES
         (CUSTOMER   VARCHAR(80),
          REGION     CHAR(5),
          YEAR       INTEGER)
       DISTRIBUTE BY HASH (YEAR)
       ORGANIZE BY DIMENSIONS (REGION, YEAR)
  18. PURCHASEDATE 列から生成された PURCHASEYEARMONTH 列を持つ SALES 表を作成します。 式を使用して、元の PURCHASEDATE 列に対して単調な列を作成し、 それによって、ディメンションとして使用するのに適切にします。 表は REGION 列で配分されており、各データベース・パーティションで PURCHASEYEARMONTH 列に従って、 エクステントに編成されています。 つまり、異なる地域は異なるデータベース・パーティションにあり、 異なる購入月はこれらのデータベース・パーティション内の異なるセル (またはエクステントのセット) に属します。
       CREATE TABLE SALES
         (CUSTOMER            VARCHAR(80),
          REGION              CHAR(5),
          PURCHASEDATE        DATE,
          PURCHASEYEARMONTH   INTEGER
                                 GENERATED ALWAYS AS (INTEGER(PURCHASEDATE)/100))
       DISTRIBUTE BY HASH (REGION)
       ORGANIZE BY DIMENSIONS (PURCHASEYEARMONTH)
  19. CUSTOMERNUM 列から生成された、 CUSTOMERNUMDIM 列を持つ CUSTOMER 表を作成します。 式を使用して、元の CUSTOMERNUM 列に対して単調な列を作成し、 それによって、ディメンションとして使用するのに適切にします。 表は CUSTOMERNUMDIM 列に従ってセルに編成され、 表内のそれぞれのセルには、50 人の顧客が入っています。 ユニーク索引が CUSTOMERNUM に作成された場合、カスタマー番号は、 表内のエクステントの特定のセットに、50 の値のセットがあるように、 クラスター化されます。
       CREATE TABLE CUSTOMER
         (CUSTOMERNUM      INTEGER,
          CUSTOMERNAME     VARCHAR(80),
          ADDRESS          VARCHAR(200),
          CITY             VARCHAR(50),
          COUNTRY          VARCHAR(50),
          CODE             VARCHAR(15),
          CUSTOMERNUMDIM   INTEGER
                              GENERATED ALWAYS AS (CUSTOMERNUM/50))
       ORGANIZE BY DIMENSIONS (CUSTOMERNUMDIM)
  20. ORASERVER という Oracle サーバー上に、EMPLOYEE というリモート基本表を作成します。 この新しく作成されたリモート基本表を参照する EMPLOYEE というニックネームも自動的に作成されます。
       CREATE TABLE EMPLOYEE
         (EMP_NO       CHAR(6)       NOT NULL,
          FIRST_NAME   VARCHAR(12)   NOT NULL,
          MID_INT      CHAR(1)       NOT NULL,
          LAST_NAME    VARCHAR(15)   NOT NULL,
          HIRE_DATE    DATE,
          JOB          CHAR(8),
          SALARY       DECIMAL(9,2),
          PRIMARY KEY (EMP_NO))
       OPTIONS
         (REMOTE_SERVER 'ORASERVER',
          REMOTE_SCHEMA 'J15USER1',
          REMOTE_TABNAME 'EMPLOYEE')

    以下の CREATE TABLE ステートメントは、表名 (または表名と明示的リモート基本表名) を指定して、 大文字小文字のいずれか希望する文字にする方法を示したものです。 employee という小文字の ID は、ID が大文字に暗黙的に変換されることを示すために使用されています。

    Informix® サーバー上に EMPLOYEE (大文字) というリモート基本表を作成し、その表に EMPLOYEE (大文字) というニックネームを作成します。
       CREATE TABLE employee
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER')
    REMOTE_TABNAME オプションが指定されておらず、 table-name が区切り文字で区切られていない場合、リモート・データ・ソースが通常は小文字で名前を保管する場合でも、リモート基本表名は大文字になります。
    Informix サーバー上に employee (小文字) というリモート基本表を作成し、その表に EMPLOYEE (大文字) というニックネームを作成します。
       CREATE TABLE employee
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER',
          REMOTE_TABNAME 'employee')
    区切り ID をサポートするリモート・データ・ソースで表を作成するときには、 REMOTE_TABNAME オプションと、大文字小文字のいずれかで表名を指定した文字ストリング定数を使用します。
    Informix サーバー上に employee (小文字) というリモート基本表を作成し、その表に employee (小文字) というニックネームを作成します。
       CREATE TABLE "employee"
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER')
    REMOTE_TABNAME オプションが指定されておらず、 table-name が区切り文字で区切られている場合、リモート基本表名は table-nameと同じになります。
  21. 生徒 ID を使用して生徒を探すのに使用できる、範囲がクラスター化された表を作成します。 各生徒のレコードには、学校 ID、プログラム ID、生徒番号、生徒 ID、生徒のファーストネーム、 生徒のラストネーム、および生徒の成績平均値 (GPA) が含まれます。
       CREATE TABLE STUDENTS
         (SCHOOL_ID     INTEGER   NOT NULL,
          PROGRAM_ID    INTEGER   NOT NULL,
          STUDENT_NUM   INTEGER   NOT NULL,
          STUDENT_ID    INTEGER   NOT NULL,
          FIRST_NAME    CHAR(30),
          LAST_NAME     CHAR(30),
          GPA           DOUBLE)
       ORGANIZE BY KEY SEQUENCE
         (STUDENT_ID
           STARTING FROM 1
           ENDING AT 1000000)
         DISALLOW OVERFLOW
    各レコードのサイズは、列の合計に位置合わせと、範囲がクラスター化された表の行のヘッダーを加算して求めます。 この場合は、4 + 4 + 4 + 4 + 30 + 30 + 8 + 3 (NULL 可能列) + 1 (位置合わせ) + 10 (ヘッダー) で、 98 バイトが行のサイズです。 ページ・サイズが 4 KB (4096 バイト) なら、 ページのオーバーヘッドを差し引いて 4038 バイトが使用可能なので、 ページあたりに 41 のレコードを収められるスペースがある計算になります。 つまり、100 万人の生徒のレコードを収容するためには、24,391 ページ (100 万をページあたりのレコード数 41 で除算) が必要です。 表のオーバーヘッド用に 2 ページを追加するとして、 表を作成する際に割り振る 4 KB ページの最終的な数は、24,393 になります。
  22. 制約名の指定されていない、 機能従属関係を持つ DEPARTMENT という表を作成します。
       CREATE TABLE DEPARTMENT
         (DEPTNO     SMALLINT      NOT NULL,
          DEPTNAME   VARCHAR(36)   NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT   SMALLINT      NOT NULL,
          LOCATION   CHAR(30),
         CHECK (DEPTNAME DETERMINED BY DEPTNO) NOT ENFORCED)
  23. 保護対象行を持つ表を作成します。
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE DB2SECURITYLABEL,
          POINTS      INTEGER,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  24. 保護対象列を持つ表を作成します。
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE CHAR(8),
          POINTS      INTEGER COLUMN SECURED WITH CLUBPOSITION,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  25. 保護対象の行および列を持つ表を作成します。
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE DB2SECURITYLABEL,
          POINTS      INTEGER COLUMN SECURED WITH CLUBPOSITION,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  26. パーティション表のラージ・オブジェクトは、デフォルトでデータと同じ表スペースに配置されます。 このデフォルトの動作をオーバーライドするには、LONG IN 節を使用して、ラージ・オブジェクトのための表スペースを 1 つ以上指定します。 ここでは、DOCUMENTS という名前の表を作成し、その表のラージ・オブジェクト・データを (各データ・パーティションのラウンドロビン方式で) 表スペース TBSP1 と TBSP2 に保管するように設定します。
       CREATE TABLE DOCUMENTS
         (ID INTEGER,
          CONTENTS CLOB)
         LONG IN TBSP1, TBSP2
         PARTITION BY RANGE (ID)
           (STARTING 1 ENDING 1000
            EVERY 100)
    あるいは、長形式の構文を使用して、各データ・パーティションの LARGE 表スペースを明示的に指定することも可能です。 下の例では、最初のデータ・パーティションの CLOB データを LARGE_TBSP3 に配置し、その他のデータ・パーティションの CLOB データをラウンドロビン方式で LARGE_TBSP1 と LARGE_TBSP2 に分散させます。
       CREATE TABLE DOCUMENTS
         (ID INTEGER,
          CONTENTS CLOB)
         LONG IN LARGE_TBSP1, LARGE_TBSP2
         PARTITION BY RANGE (ID)
           (STARTING 1 ENDING 100
            IN TBSP1 LONG IN LARGE_TBSP3,
            STARTING 101 ENDING 1000
            EVERY 100)
  27. 2 つのデータ・パーティションがある ACCESSNUMBERS という名前のパーティション表を作成します。 行 (10, NULL) を最初のパーティションに配置し、行 (NULL, 100) を 2 番目の (最後の) データ・パーティションに配置します。
       CREATE TABLE ACCESSNUMBERS
         (AREA INTEGER,
          EXCHANGE INTEGER)
         PARTITION BY RANGE (AREA NULLS LAST, EXCHANGE NULLS FIRST)
           (STARTING (1,1) ENDING (10,100),
            STARTING (11,1) ENDING (MAXVALUE,MAXVALUE))
    第 2 列の NULL 値は先頭にソートされるので、行 (11, NULL) は最後のデータ・パーティションの下限 (11, 1) よりも下にソートされることになります。つまり、この行を挿入しようとすると、エラーが戻されます。 行 (12, NULL) は、最後のデータ・パーティションの範囲内に収まります。
  28. 1 つのデータ・パーティションとパーティション列 PERCENT がある RATIO という名前の表を作成します。
       CREATE TABLE RATIO
         (PERCENT INTEGER)
         PARTITION BY RANGE (PERCENT)
           (STARTING (MINVALUE) ENDING (MAXVALUE))
    この表定義では、列 PERCENT に任意の整数値を挿入できます。 以下の RATIO 表定義の場合は、1 から 100 の間の任意の整数値 (1 と 100 も含む) を列 PERCENT に挿入できます。
       CREATE TABLE RATIO
         (PERCENT INTEGER)
         PARTITION BY RANGE (PERCENT)
           (STARTING 0 EXCLUSIVE ENDING 100 INCLUSIVE)
  29. 2 つの列がある MYDOCS という名前の表を作成します。1 つは ID 列であり、もう 1 つは XML 文書を格納する列です。
       CREATE TABLE MYDOCS
         (ID INTEGER,
          DOC XML)
       IN HLTBSPACE
  30. 4 つの列がある NOTES という名前の表を作成します。そのうちの 1 つは XML の注記を格納する列です。
       CREATE TABLE NOTES
         (ID          INTEGER,
          DESCRIPTION VARCHAR(255),
          CREATED     TIMESTAMP,
          NOTE        XML)
  31. 各従業員の電話番号と住所を含む表 EMP_INFO を作成します。 従業員情報の変更を追跡するために、表に ROW CHANGE TIMESTAMP 列を組み込みます。
    CREATE TABLE EMP_INFO
         (EMPNO           CHAR(6) NOT NULL,
          EMP_INFOCHANGE  TIMESTAMP NOT NULL GENERATED ALWAYS
           FOR EACH ROW ON UPDATE
           AS ROW CHANGE TIMESTAMP,
          EMP_ADDRESS     VARCHAR(300),
          EMP_PHONENO     CHAR(4),
          PRIMARY KEY (EMPNO) )
  32. 2 つのデータ・パーティションがある DOCUMENTS という名前のパーティション表を作成します。
    • 最初のパーティション内のデータ・オブジェクトは、表スペース TBSP11 にあります。 このパーティション上のパーティション索引のパーティションは、表スペース TBSP21 にあります。 XML データ・オブジェクトは表スペース TBSP31 にあります。
    • 2 番目のパーティション内のデータ・オブジェクトは、表スペース TBSP12 にあります。 このパーティション上のパーティション索引のパーティションは、表スペース TBSP22 にあります。 XML データ・オブジェクトは表スペース TBSP32 にあります。
    表レベルの INDEX IN 節は、パーティション索引に関する表スペースの選択に影響しません。
       CREATE TABLE DOCUMENTS
       (ID        INTEGER,
        CONTENTS  XML)  INDEX IN TBSPX
       PARTITION BY (ID NULLS LAST)
       (STARTING FROM 1 INCLUSIVE ENDING AT 100 INCLUSIVE
        IN TBSP11 INDEX IN TBSP21 LONG IN TBSP31,
        STARTING FROM 101 INCLUSIVE ENDING AT 200 INCLUSIVE
        IN TBSP21 INDEX IN TBSP22 LONG IN TBSP32)
  33. 2 つのデータ・パーティションがある SALES という名前のパーティション表を作成します。
    • 最初のパーティション内のデータ・オブジェクトは、表スペース TBSP11 にあります。 このパーティション上のパーティション索引のパーティションは、表スペース TBSP21 にあります。
    • 2 番目のパーティション内のデータ・オブジェクトは、表スペース TBSP12 にあります。 パーティション索引オブジェクトは表スペース TBSP22 にあります。
    表レベルの INDEX IN 節は、パーティション索引に関する表スペースの選択に影響しません。
       CREATE TABLE SALES
       (SID     INTEGER,
        AMOUNT  INTEGER)  INDEX IN TBSPX
       PARTITION BY RANGE (SID NULLS LAST)
       (STARTING FROM 1 INCLUSIVE ENDING AT 100 INCLUSIVE
        IN TBSP11 INDEX IN TBSP21,
        STARTING FROM 101 INCLUSIVE ENDING AT 200 INCLUSIVE
        IN TBSP12 INDEX IN TBSP22)
    
  34. 4 つの列がある BOOKS という名前の表を作成します。そのうちの 1 つの名前は DATE_ADDED で、デフォルトで現在の TIMESTAMP を挿入します。
       CREATE TABLE BOOKS
         (ISBN_NUM   INTEGER,
          TITLE      VARCHAR(255),
          AUTHOR     VARCHAR(255),
          DATE_ADDED TIMESTAMP WITH DEFAULT CURRENT TIMESTAMP)
  35. 非 Unicode データベース内に STUDENTS と呼ばれる Unicode 表を作成します。 コード・セット 1252 およびテリトリー CA を使用してデータベースが作成され、ALT_COLLATE データベース構成パラメーターが IDENTITY_16BIT に更新されたとします。
       CREATE TABLE STUDENTS (
       		    STUDENTID INT NOT NULL, 
          		FAMILY_NAME VARCHAR(36) NOT NULL,
          		GIVEN_NAME VARCHAR(36) NOT NULL, 
          		PRIMARY KEY(STUDENTID)) 
       	  CCSID UNICODE
  36. 例 1 で作成された TDEPT 表に基づいて、TDEPT_TEMP という表を作成します。
       CREATE TABLE TDEPT_TEMP LIKE TDEPT
    TDEPT_TEMP 表の定義は、主キーが定義されないことと、デフォルトの表スペースが暗黙的に選択されることを除き、TDEPT のものと同じになります。
  37. カラム・オーガナイズ表 CDE.TDEPT に、ユーザー保守のカラム・オーガナイズ・マテリアライズ照会表を作成します。
       CREATE TABLE mqt_tdept AS
          (SELECT *
            FROM cde.tdept
            WHERE deptno BETWEEN 10 AND 20)
          DATA INITIALLY DEFERRED
          REFRESH DEFERRED
          MAINTAINED BY USER
          ORGANIZE BY COLUMN
  38. マテリアライズ照会表によって継承される列セキュリティー・ラベル。
       CREATE SECURITY LABEL COMPONENT level_array ARRAY ['A', 'B', 'C']
    
       CREATE SECURITY POLICY P COMPONENTS level_array WITH DB2LBACRULES
    
       CREATE SECURITY LABEL P.A COMPONENT level_array 'A'
    
       CREATE SECURITY LABEL P.B COMPONENT level_array 'B'
    
       CREATE SECURITY LABEL P.C COMPONENT level_array 'C'
    
       CREATE TABLE t1 (c1 INT, c2 INT SECURED WITH B, c3 REAL SECURED WITH A)
          SECURITY POLICY P
    
       CREATE TABLE t2 (c4 REAL, c5 INT SECURED WITH C, c6 DB2SECURITYLABEL)
          SECURITY POLICY P
    マテリアライズ照会表の生成
    CREATE TABLE m1 AS
       (SELECT  c1, c3, c5, c6 FROM  t1,t2 WHERE c2 !=100)
       DATA INITALLY DEFERRED REFRESH DEFERRED
    t1.c2 のセキュリティー・ラベルを使って m1 のすべての列のセキュリティー・ラベルが計算されます (これが照会の述部に出現するため)。 マテリアライズ照会表 m1 のラベル・ベースのアクセス制御プロパティーは次のとおりです。
    • セキュリティー・ポリシー = P
    • 列 m1.c1 のセキュリティー・ラベル = P.B
    • 列 m1.c3 のセキュリティー・ラベル = P.A
    • 列 m1.c5 のセキュリティー・ラベル = P.B
    • 列 m1.c6 のセキュリティー・ラベル = P.B、さらに DB2SECURITYLABEL です。
    マテリアライズ照会表のステージング表がラベル・ベースのアクセス制御で保護されています。 ステージング表 st1 は次のように定義されています。
       CREATE TABLE st1 FOR m1 PROPAGATE IMMEDIATE
    ステージング表 st1 のラベル・ベースのアクセス制御プロパティーは次のとおりです。
    • セキュリティー・ポリシー = P
    • 列 st1.c1 のセキュリティー・ラベル = P.B
    • 列 st1.c3 のセキュリティー・ラベル = P.A
    • 列 st1.c5 のセキュリティー・ラベル = P.B
    • 列 st1.c6 のセキュリティー・ラベル = P.B、さらに DB2SECURITYLABEL です。
  39. 以下の例では、行オーガナイズ表 T1 に基づいた T1_SHADOW というシャドー表の作成方法を示します。

    1. 基本表を作成し、主キーを定義します。 基本表の主キーをシャドー表の選択リストに含める必要があります。 基本表の各行とシャドー表内の対応する行との 1 対 1 マッピングを設定するには、シャドー表に主キーが必要です。 また、主キーによりシャドー表の保守が容易になります。
      CREATE TABLE t1 (
        c1 INTEGER NOT NULL,
        c2 INTEGER
      ) ORGANIZE BY ROW;
      
      ALTER TABLE t1
        ADD CONSTRAINT t1_pk PRIMARY KEY(c1);
    2. シャドー表を作成します。
      CREATE TABLE t1_shadow AS
          (SELECT c1, c2 FROM t1)
        DATA INITIALLY DEFERRED
        REFRESH DEFERRED
        MAINTAINED BY REPLICATION
        ORGANIZE BY COLUMN;
      
      SET INTEGRITY FOR t1_shadow ALL IMMEDIATE UNCHECKED;
      
      ALTER TABLE t1_shadow
        ADD CONSTRAINT t1_shadow_pk PRIMARY KEY (c1);
  40. 可能な各ストリング単位指定を示す、STRING_UNITS という名前の表を作成します。
    CREATE TABLE string_units
       (c1 VARCHAR(10),
        c2 VARCHAR(10 OCTETS),
        c3 VARCHAR(10 CODEUNITS32),
        c4 VARGRAPHIC(10),
        c5 VARGRAPHIC(10 CODEUNITS16),
        c6 VARGRAPHIC(10 CODEUNITS32))
    以下のストリング単位が列に含まれます。
    • c1 = OCTETS (環境ストリング単位が SYSTEM の場合)、CODEUNITS32 (環境ストリング単位が CODEUNITS32 の場合)
    • c2 = OCTETS
    • c3 = CODEUNITS32
    • c4 = CODEUNITS16 (環境ストリング単位が SYSTEM の場合)、CODEUNITS32 (環境ストリング単位が CODEUNITS32 の場合)
    • c5 = CODEUNITS16
    • c6 = CODEUNITS32
    環境ストリング単位は NLS_STRING_UNITS セッション・レベル・グローバル変数で設定できます。 NLS_STRING_UNITS セッション・レベル・グローバル変数が設定されていないかヌルの場合、環境ストリング単位はstring_unitsデータベース構成パラメーターの値によって決定されます。
  41. ユニーク別ランダム方式を使用するランダム分散表を作成します。 分散キーは、索引の両方のキー (IDNAME) に自動的に設定されます。
    CREATE TABLE RAND_BY_UNIQUE (ID BIGINT NOT NULL,
                                 NAME CHAR(25) NOT NULL,
                                 DESCRIPTION VARCHAR(1000),
                                 PRIMARY KEY(ID, NAME)) DISTRIBUTE BY RANDOM
  42. 生成別ランダム方式を使用するランダム分散表を作成します。 分散キーは、内部列RANDOM_DISTRIBUTION_KEYに設定されます。この列は、明示的に指定されない限り、SQL からは非表示になります。
    CREATE TABLE RAND_BY_GENERATION (C1 BIGINT) DISTRIBUTE BY RANDOM