CREATE TABLE

CREATE TABLE ステートメントは、現行サーバーで表を定義します。 この定義には、その表の名前、およびその表の列の名前と属性を含める必要があります。 この定義には、基本キーなど、表の他の属性も含めることができます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことも、 あるいは対話式に実行することもできます。 これは、動的に準備できる実行可能ステートメントです。

許可

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

  • 次のシステム権限
    • 物理ファイル作成 (CRTPF) コマンドに対する *USE 権限
    • データ・ディクショナリー に対する *CHANGE 権限。ただし、表が作成され るライブラリーが、データ・ディクショナリーを持つ SQL スキーマの場合。
  • データベース管理者権限

SQL 名が指定され、該当の表が作成されるライブラリーの名前と同じ名前の ユーザー・プロファイルが存在し、しかもその名前がステートメントの権限 ID と異なっている場合、ステートメントの権限 ID によって保持される特権 には、少なくとも次の 1 つが含まれていなければなりません。

  • その名前を持つユーザー・プロファイルに対する *ADD システム権限
  • データベース管理者権限

外部キーを定義する場合、ステートメントの権限 ID が保持する特権には、親表に関して少なくとも次の 1 つが含まれていなければなりません。

  • 該当の表に対する REFERENCES 特権またはオブジェクト管理権限。
  • 指定された親キーの各列に対する REFERENCES 特権。
  • その表の所有権
  • データベース管理者権限

フィールド・プロシージャーを定義する場合は、ステートメントの権限 ID によって保持される特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • 次のシステム権限
    • プログラムに対する *EXECUTE システム権限、および
    • プログラムが含まれるスキーマに対する USAGE 特権
  • データベース管理者権限

LIKE 文節または AS select-statement が指定されている場合、ステートメントの許可 ID が保持する特権には、これらの文節で指定されている表またはビューに対する以下の特権が少なくとも 1 つ含まれている必要があります。

  • 表またはビューに対する SELECT 特権
    • WITH NO DATA 節を使用する LIKE 節および AS select-statement には、*READ 権限は必要ありません。
  • 表またはビューの所有権
  • データベース管理者権限

特殊タイプを参照する場合は、ステートメントの権限 ID によって保持される 特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • ステートメント内で識別された、それぞれの特殊タイプごとに、
    • その特殊タイプに対する USAGE 特権、および
    • 特殊タイプが含まれるスキーマに対する USAGE 特権
  • データベース管理者権限

既存の表に置き換えるには、ステートメントの権限 ID が保持する特権に、次のうち少なくともいずれか 1 つを含める必要があります。

  • 次のシステム権限
    • 変更の開始テーブル上の*OBJOPR、*OBJMGT、*READのシステム権限変更の終わり
    • 表を削除するために必要な全権限
    • ON REPLACE DELETE ROWS 節を使用する場合、表に対する DELETE 特権
    • AS select-statement が指定されている場合、表に対する INSERT 特権
  • データベース管理者権限

SQL特権に対応するシステム権限については、表またはビューへのアクセス権を確認する際の対応システム権限 および 特殊タイプに対する特権を確認する際の対応システム権限を参照してください。

構文

構文図を読むビジュアル構文図をスキップCREATEOR REPLACETABLE表名 FOR SYSTEM NAMEシステム・オブジェクト ID (,column-definitionperiod-definitionLIKE表名ビュー名copy-optionsunique-constraintreferential-constraintcheck-constraint)LIKE表名ビュー名copy-optionsas-result-tablecopy-optionsmaterialized-query-definitionWITH RESTRICT ON DROP1NOT LOGGED INITIALLY NOT VOLATILECARDINALITYVOLATILECARDINALITY RCDFMTフォーマット名media-preferencememory-preferenceON REPLACE PRESERVE ALL ROWSON REPLACE PRESERVE ROWSON REPLACE DELETE ROWSdistribution-clausepartitioning-clause
media-preference
構文図を読むビジュアル構文図をスキップUNIT ANYUNIT SSD
memory-preference
構文図を読むビジュアル構文図をスキップKEEP IN MEMORY NOYES
注:
  • 1 オプションの文節は、任意の順序で指定できます。
column-definition
構文図を読むビジュアル構文図をスキップ列名FORCOLUMNシステム列名データ・タイプ1 default-clausegenerated-clauseNOT NULLNOT HIDDENIMPLICITLY HIDDENcolumn-constraintFIELDPROC外部プログラム名(,定数)datalink-options23
データ・タイプ
構文図を読むビジュアル構文図をスキップbuilt-in-type特殊タイプ名
注:
  • 1 data-type は、行変更タイム・スタンプ列、 行開始タイム・スタンプ列と行終了タイム・スタンプ列、およびトランザクション開始 ID タイム・スタンプ列ではオプションです。
  • 2 datalink-options は、DATALINK および DATALINK をソースとする特殊タイプにのみ指定できます。
  • 3 同じ文節を複数回指定することはできません。
built-in-type
構文図を読むビジュアル構文図をスキップSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)(整数,0, 整数)FLOAT(53)(整数)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)(整数)CHARACTERCHARVARYINGVARCHAR(整数)allocate-clauseFOR BIT DATAFOR SBCS DATAFOR MIXED DATAccsid-clauseCHARACTERCHARLARGE OBJECTCLOB(1M)(整数KMG)allocate-clauseFOR SBCS DATAFOR MIXED DATAccsid-clauseGRAPHIC(1)(整数)GRAPHIC VARYINGVARGRAPHIC(整数)allocate-clauseDBCLOB(1M)(整数KMG)allocate-clauseccsid-clauseNATIONAL CHARACTERNATIONAL CHARNCHAR(1)(整数)NATIONAL CHARACTERNATIONAL CHARNCHARVARYINGNVARCHAR(整数)allocate-clauseNATIONAL CHARACTERNCHARLARGE OBJECTNCLOB(1M)(整数KMG)allocate-clausenormalize-clauseBINARY(1)(整数)BINARY VARYINGVARBINARY(整数)allocate-clauseBLOBBINARY LARGE OBJECT(1M)(整数KMG)allocate-clauseDATETIME(0)TIMESTAMP(6)(整数)DATALINK(200)(整数)allocate-clauseccsid-clauseROWIDXMLallocate-clauseccsid-clauseBOOLEAN
allocate-clause
構文図を読むビジュアル構文図をスキップALLOCATE(整数)
ccsid-clause
構文図を読むビジュアル構文図をスキップCCSID整数normalize-clause
normalize-clause
構文図を読むビジュアル構文図をスキップNOT NORMALIZEDNORMALIZED
default-clause
構文図を読むビジュアル構文図をスキップWITHDEFAULT 定数USERNULLCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP(6)(整数)キャスト関数名(定数USERCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP(6)(整数))
generated-clause
構文図を読むビジュアル構文図をスキップGENERATED ALWAYSGENERATED BY DEFAULT1identity-optionsas-row-change-timestamp-clauseGENERATEDALWAYSas-row-transaction-timestamp-clauseas-row-transaction-start-id-clauseas-generated-expression-clause
identity-options
構文図を読むビジュアル構文図をスキップAS IDENTITY (START WITH1数値定数INCREMENT BY1数値定数NO MINVALUEMINVALUE数値定数NO MAXVALUEMAXVALUE数値定数NO CYCLECYCLECACHE20NO CACHECACHE整数NO ORDERORDER2)
as-row-change-timestamp-clause
構文図を読むビジュアル構文図をスキップFOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
as-row-transaction-timestamp-clause
構文図を読むビジュアル構文図をスキップAS ROW BEGINSTARTEND
as-row-transaction-start-id-clause
構文図を読むビジュアル構文図をスキップAS TRANSACTION START ID
注:
  • 1 GENERATED を指定できるのは、列が ROWID データ・タイプ (または ROWID データ・タイプに基づく特殊タイプ) であるか、列が ID 列であるか、または列が行変更タイム・スタンプである場合のみです。
  • 2 同じ文節を複数回指定することはできません。
as-generated-expression-clause
構文図を読むビジュアル構文図をスキップAS(non-deterministic-expression )
non-deterministic-expression
構文図を読むビジュアル構文図をスキップDATA CHANGE OPERATIONspecial-registerbuilt-in-global-variable
special-register
構文図を読むビジュアル構文図をスキップCURRENT CLIENT_ACCTNGCURRENT CLIENT_APPLNAMECURRENT CLIENT_PROGRAMIDCURRENT CLIENT_USERIDCURRENT CLIENT_WRKSTNNAMECURRENT SERVERSESSION_USERUSER
built-in-global-variable
構文図を読むビジュアル構文図をスキップQSYS2.JOB_NAMEQSYS2.SERVER_MODE_JOB_NAMESYSIBM.CLIENT_HOSTSYSIBM.CLIENT_IPADDRSYSIBM.CLIENT_PORTSYSIBM.PACKAGE_NAMESYSIBM.PACKAGE_SCHEMASYSIBM.PACKAGE_VERSIONSYSIBM.ROUTINE_SCHEMASYSIBM.ROUTINE_SPECIFIC_NAMESYSIBM.ROUTINE_TYPE
period-definition
構文図を読むビジュアル構文図をスキップPERIODFORSYSTEM_TIME (開始列名 (begin-column-name),終了列名 (end-column-name) )
column-constraint
構文図を読むビジュアル構文図をスキップ CONSTRAINT制約名 PRIMARY KEYUNIQUEreferences-clauseCHECK(検査条件)ON INSERT VIOLATION SET列名 = DEFAULTON UPDATE VIOLATION PRESERVE列名1
datalink-options
構文図を読むビジュアル構文図をスキップLINKTYPE URL NO LINK CONTROLFILE LINK CONTROLfile-link-optionsMODE DB2OPTIONS
file-link-options
構文図を読むビジュアル構文図をスキップINTEGRITY ALLREAD PERMISSION FSREAD PERMISSION DBWRITE PERMISSION FSWRITE PERMISSION BLOCKEDRECOVERY NOON UNLINK RESTOREON UNLINK DELETE2
注:
  • 1 同じ文節を複数回指定することはできません。
  • 2 5 つの file-link-options はすべて指定する必要がありますが、任意の順序で指定できます。
as-result-table
構文図を読むビジュアル構文図をスキップ(列名FORCOLUMNシステム列名) AS(選択ステートメント) WITH NO DATAWITH DATA
copy-options
構文図を読むビジュアル構文図をスキップEXCLUDING IDENTITYCOLUMN ATTRIBUTESINCLUDING IDENTITYCOLUMN ATTRIBUTESEXCLUDINGCOLUMNDEFAULTSINCLUDINGCOLUMNDEFAULTSUSING TYPE DEFAULTSEXCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTESINCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTESEXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTESINCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
unique-constraint
構文図を読むビジュアル構文図をスキップCONSTRAINT制約名PRIMARY KEYUNIQUE(,列名)
referential-constraint
構文図を読むビジュアル構文図をスキップCONSTRAINT制約名FOREIGN KEY( ,列名 )references-clause
references-clause
構文図を読むビジュアル構文図をスキップREFERENCES親テーブル名(,列名) ON DELETE NO ACTIONON DELETERESTRICTCASCADESET NULLSET DEFAULT ON UPDATE NO ACTIONON UPDATE RESTRICT1
check-constraint
構文図を読むビジュアル構文図をスキップCONSTRAINT制約名CHECK(検査条件 ) ON INSERT VIOLATION SET列名 = DEFAULTON UPDATE VIOLATION PRESERVE列名2
distribution-clause
構文図を読むビジュアル構文図をスキップINNODEGROUP ノード・グループ名 DISTRIBUTE BY HASH(,列名)
注:
  • 1 ON DELETE 節と ON UPDATE 節は、どちらの順序でも指定できます。
  • 2 同じ文節を複数回指定することはできません。
partitioning-clause
構文図を読むビジュアル構文図をスキップPARTITION BYRANGErange-partition-specHASHhash-partition-spec
range-partition-spec
構文図を読むビジュアル構文図をスキップ (,partition-expression) (,partition-element)
partition-expression
構文図を読むビジュアル構文図をスキップ列名 NULLS LASTNULLS FIRST
partition-element
構文図を読むビジュアル構文図をスキップPARTITIONパーティション名boundary-specmedia-preferencememory-preferenceboundary-specEVERY(整数定数DAYDAYSMONTHMONTHSYEARYEARS)1
boundary-spec
構文図を読むビジュアル構文図をスキップstarting-clauseending-clause
starting-clause
構文図を読むビジュアル構文図をスキップSTARTINGFROM (,定数MINVALUEMAXVALUE)定数MINVALUEMAXVALUE INCLUSIVEEXCLUSIVE
注:
  • 1 partition-element の場合のこの構文は、数値データ・タイプまたは日時データ・タイプの partition-expression が 1 つしかない場合に有効です。
ending-clause
構文図を読むビジュアル構文図をスキップENDINGAT (,定数MINVALUEMAXVALUE)定数MINVALUEMAXVALUE INCLUSIVEEXCLUSIVE
hash-partition-spec
構文図を読むビジュアル構文図をスキップ (,列名) INTO整数PARTITIONS
materialized-query-definition
構文図を読むビジュアル構文図をスキップ(列名FORCOLUMNシステム列名) AS(選択ステートメント) refreshable-table-options
refreshable-table-options
構文図を読むビジュアル構文図をスキップ DATA INITIALLY DEFERREDDATA INITIALLY IMMEDIATE REFRESH DEFERRED 1MAINTAINED BY USERENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION
注:
  • 1 同じ文節を複数回指定することはできません。 MAINTAINED BY USER を指定しなければなりません。

説明

OR REPLACE
表が現行サーバーに存在する場合に、その変数の定義を置き換えるように指定します。 カタログ内で新しい定義が置き換えられる前に、既存の定義が実際に変更されます。
表の定義は、以下の場合に存在します。
  • FOR SYSTEM NAME が指定されていて、system-object-identifier が既存の表の system-object-identifier と一致する。
  • FOR SYSTEM NAME が指定されておらず、table-name が既存の表の system-object-identifier と一致するシステム・オブジェクト名である。
表の定義が存在していて、table-name がシステム・オブジェクト名でない場合は、table-name を変更して表に新しい名前を付けることができます。

このオプションは、表の定義が現行サーバーに存在しない場合には無視されます。

テーブル名
表の名前を指定します。 暗黙的または明示的修飾子も含め、この名前で、現行サーバーに既に存在している別名、ファイル、 索引、表、またはビューを識別することはできません。

SQL 名が指定されている場合、表は、暗黙的または明示的修飾子で指定し ているスキーマ内に作成されます。

システム名が指定されている場合、表名は、修飾子で指定しているスキーマ内に作成されます。 修飾されない場合:

  • CURRENT SCHEMA 特殊レジスターの値が *LIBL である場合、表は、現行ライブラリー (*CURLIB) 内に作成されます。
  • そうでない場合、表は現行スキーマ内に作成されます。
FOR SYSTEM NAME システム・オブジェクト ID
表のシステム・オブジェクト ID を示します。 システム・オブジェクト ID は、現行サーバーに 既に存在する表、ビュー、別名、または索引と同一であってはなりません。 システム・オブジェクト ID は、非修飾システム ID でなければなりません。

システム・オブジェクト ID が 指定される場合、表名 は有効なシステム・オブジェクト名であってはなりません。

column-definition

列の属性を定義します。 少なくとも 1 つ以上で、8000 を超えない列の定義がなければなりません。

列の行バッファー・バイト・カウントの合計は、32766 (VARCHAR 列、VARGRAPHIC 列、または VARBINARY 列が指定されている場合は 32740) 以下でなければなりません。 さらに、LOB 列または XML 列を指定してある場合は、挿入または更新の時点で、すべての列の行データ・バイト・カウントの合計が 3 758 096 383 を超えていてはなりません。 データ・タイプに応じた列のバイト・カウントについては、 最大行サイズを参照してください。

列名 (column-name)
表を構成する列の名前を指定します。 列名 は修飾できません。表の複数の列や表のシステム列名に同じ名前を使用することもできません。
FOR COLUMN システム列名
列の IBM i 名を指定します。 表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。

システム列名が指定されず、また列名が有効なシステム列名でない場合には、システム列名が生成されます。 システム列名の生成方法について詳しくは、 列名の生成の規則を参照してください。

データ・タイプ
列のデータ・タイプを指定します。
組み込みタイプ (built-in-type)
組み込みタイプ には以下のいずれかを使用します。
SMALLINT
短整数を示します。
INTEGER または INT
長整数を示します。
BIGINT
64 ビット整数を示します。
DECIMAL (integerinteger) または DEC (integerinteger)
DECIMAL (integer) または DEC (integer)
DECIMAL または DEC
パック 10 進数を示します。 最初の整数は数値の精度、つまり総桁数であり、1 から 63 までの範囲で指定できます。 2 番目の整数は、数値の位取り (小数点の右側に置く桁数) です。 位取りは、0 からその数値の精度までの範囲で指定できます。

DECIMAL(p,0) は、DECIMAL(p) と指定でき、また DECIMAL(5,0) は、DECIMAL と指定できます。

NUMERIC (integerinteger) または NUM (integer,integer)
NUMERIC (integer) または NUM (integer)
NUMERIC または NUM
ゾーン 10 進数を示します。 最初の整数は数値の精度、つまり総桁数であり、1 から 63 までの範囲で指定できます。 2 番目の整数は、数値の位取り (小数点の右側に置く桁数) です。 位取りは、0 からその数値の精度までの範囲で指定できます。

NUMERIC(p) を NUMERIC(p,0) の代わりに、NUMERIC を NUMERIC(5,0) の代わりに使用しても構いません。

FLOAT
倍精度の浮動小数点数を示します。
FLOAT (整数)
指定する整数の値によって、単精度、または倍精度の浮動小数点数を示します。 整数の値は、1 から 53 までの範囲になければなりません。 1 から 24 までの値は単精度、25 から 53 までの値は倍精度を示します。 デフォルト値は 53 です。
REAL
単精度の浮動小数点数を示します。
DOUBLE PRECISION または DOUBLE
倍精度の浮動小数点数を示します。
DECFLOAT (整数)
DECFLOAT
IEEE 10 進浮動小数点数を示します。 整数 の値は、16 か 34 でなければならず、これは、保管できる有効数字の数を表します。 整数 を省略すると、DECFLOAT 列は、34 の有効数字を提示可能になります。
CHARACTER (integer) または CHAR (integer)
CHARACTER または CHAR
整数 (バイト数) で指定した長さの固定長文字ストリングを示します。 整数として指定できる値の範囲は、1 から 32766 (NULL 可能な場合には 32765) までです。 FOR MIXED DATA または混合データの CCSID を指定する場合は、4 から 32766 (NULL 可能な場合は 32765) までが範囲になります。 長さ指定を省略すると、長さとして 1 が使用されます。
CHARACTER VARYING (integer) または CHAR VARYING (integer) または VARCHAR (integer)
最大長が整数 (バイト数) の可変長文字ストリングを示します。指定できる範囲は 1 から 32740 (ヌル可能な場合は 32739) までです。 FOR MIXED DATA または混合データの CCSID を指定する場合は、4 から 32740 (NULL 可能な場合は 32739) までが範囲になります。
CHARACTER LARGE OBJECT (integer[K|M|G]) または CHAR LARGE OBJECT (integer[K|M|G]) または CLOB (integer[K|M|G])
CHARACTER LARGE OBJECT または CHAR LARGE OBJECT または CLOB
指定された最大長 (バイト数) の文字ラージ・オブジェクト・ストリングを示します。 最大長は、1 から 2 147 483 647 の範囲の値でなければなりません。 FOR MIXED DATA や混合データ CCSID を指定する場合は、4 から 2 147 483 647 の 範囲の値を指定します。 長さ指定を省略すると、1 メガバイトの長さが想定されます。 CLOB は、分散表内で使用することはできません。
整数
整数の最大値は 2 147 483 647 です。 整数 は、ストリングの最大長を表します。
integer K
整数の最大値は 2 097 152 です。 ストリングの最大長は、整数 の 1024 倍です。
integer M
整数の最大値は 2 048 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
integer G
整数の最大値は 2です。 この文字列の最大長は、 整数の1 073 741 824 倍です。
GRAPHIC (整数)
GRAPHIC
整数 で指定された長さを持つ固定長グラフィック・ストリングを示します。この整数は、1 から 16383 (NULL が使用可能な場合は 16382) までの範囲です。 長さ指定を省略すると、長さとして 1 が使用されます。
VARGRAPHIC (integer) または GRAPHIC VARYING (integer)
最大長が整数 の可変長グラフィック・ストリングを示します。指定できる範囲は 1 から 16370 (NULL 可能な場合は 16369) までです。
DBCLOB (整数[K | M | G])
DBCLOB
指定された最大長の 2 バイト文字ラージ・オブジェクト・ストリングを示します。

最大長は、1 から 1 073 741 823 の範囲の値でなければなりません。 長さ指定を省略すると、1 メガバイトの長さが想定されます。 DBCLOB は、分散表内で使用することはできません。

整数
整数の最大値は 1 073 741 823 です。 整数 は、ストリングの最大長を表します。
integer K
整数の最大値は 1 028 576 です。 ストリングの最大長は、整数 の 1024 倍です。
integer M
整数の最大値は 1 024 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
integer G
整数の最大値は 1です。 この文字列の最大長は、 整数の1 073 741 824 倍です。
NATIONAL CHARACTER (integer) または NATIONAL CHAR (integer) または NCHAR (integer)
NATIONAL CHARACTER または NATIONAL CHAR または NCHAR
整数 で指定された長さを持つ固定長 Unicode グラフィック・ストリングを示します。この整数は、1 から 16383 (NULL が使用可能な場合は 16382) までの範囲です。 長さ指定を省略すると、長さとして 1 が使用されます。 CCSID は 1200 です。
NATIONAL CHARACTER VARYING (integer) または NATIONAL CHAR VARYING (integer) または NCHAR VARYING (integer) または NVARCHAR (integer)
最大長が整数 の可変長 Unicode グラフィック・ストリングを示します。指定できる範囲は 1 から 16370 (NULL 可能な場合は 16369) までです。 CCSID は 1200 です。
NATIONAL CHARACTER LARGE OBJECT (integer[K|M|G]) または NCHAR LARGE OBJECT (integer[K|M|G]) または NCLOB(integer[K|M|G])
NATIONAL CHARACTER LARGE OBJECT または NCHAR LARGE OBJECT または NCLOB
指定された最大長の Unicode 2 バイト文字ラージ・オブジェクト・ストリングを示します。

最大長は、1 から 1 073 741 823 の範囲の値でなければなりません。 長さ指定を省略すると、1 メガバイトの長さが想定されます。 CCSID は 1200 です。 NCLOB は、分散表内で使用することはできません。

整数
整数の最大値は 1 073 741 823 です。 整数 は、ストリングの最大長を表します。
integer K
整数の最大値は 1 028 576 です。 ストリングの最大長は、整数 の 1024 倍です。
integer M
整数の最大値は 1 024 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
integer G
整数の最大値は 1です。 この文字列の最大長は、 整数の1 073 741 824 倍です。
BINARY (整数)
BINARY
整数 で指定した長さの固定長バイナリー・ストリングを示します。 整数として指定できる値の範囲は、1 から 32766 (NULL 可能な場合には 32765) までです。 長さ指定を省略すると、長さとして 1 が使用されます。
BINARY VARYING (integer) または VARBINARY(integer)
最大長が整数 の可変長バイナリー・ストリングを示します。指定できる範囲は 1 から 32740 (NULL 可能な場合は 32739) までです。
BLOB(integer[K|M|G]) または BINARY LARGE OBJECT(integer[K|M|G])
BLOB または BINARY LARGE OBJECT
指定された最大長の 2 進ラージ・オブジェクト・ストリングを示 します。 最大長は、1 から 2 147 483 647 の範囲の値でなければなりません。 長さ指定を省略すると、1 メガバイトの長さが想定されます。 BLOB は、分散表内で使用することはできません。
整数
整数の最大値は 2 147 483 647 です。 整数 は、ストリングの最大長を表します。
integer K
整数の最大値は 2 097 152 です。 ストリングの最大長は、整数 の 1024 倍です。
integer M
整数の最大値は 2 048 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
integer G
整数の最大値は 2です。 この文字列の最大長は、 整数の1 073 741 824 倍です。
日付
日付を示します。
時刻
時刻を示します。
TIMESTAMP(integer) または TIMESTAMP
タイム・スタンプを示します。 integer は 0 から 12 までの整数で、秒未満の精度を 0 (秒) から 12 (ピコ秒) で指定します。 デフォルトは 6 (マイクロ秒) です。
変更の開始BOOLEAN変更の終わり
変更の開始ブール値の場合。変更の終わり
DATALINK(integer ) または DATALINK
指定された最大長のデータ・リンクを示します。 最大長は、1 から 32717 の範囲の値でなければなりません。 FOR MIXED DATA や混合データ CCSID を指定する場合は、4 から 32717 の範囲の値を指定します。 予期される最大の URL と、何らかのデータ・リン ク・コメントが収まるだけの充分な長さを指定する必要があります。 長さ指定を省略すると、200 という長さが想定されます。 DATALINK は、分散表内で使用することはできません。

DATALINK 値は、1 組の組み込みスカラー関数でカプセル化される値です。 DLVALUE 関数で DATALINK 値を作成します。 次の関数を使用すれば、DATALINK 値から属性を抽出することができます。

  • DLCOMMENT
  • DLLINKTYPE
  • DLURLCOMPLETE
  • DLURLPATH
  • DLURLPATHONLY
  • DLURLSCHEME
  • DLURLSERVER

データ・リンクは、どの索引にもその一部として含めることはできません。 したがって、基本キー、外部キー、または固有制約の 1 つの列としてデータ・リンクを組み込むことは不可能です。

ROWID
行 ID を示します。 ROWID 列は、1 つの表に 1 つだけ設けることができます。 ROWID はパーティション化された表で使用することはできません。
XML
XML 文書の場合。 XML 列に挿入できるのは整形式の文書のみです。 列の CCSID を 65535 とすることはできません。 列の最大長は、常に 2 147 483 647 バイトになります。
XML 列には、以下の制限があります。
  • 列は、どの索引にもその一部として含めることはできません。
  • 列は、主キー、ユニーク・キー、または外部キーにもその一部として含めることはできません。
  • チェック制約でその列を使用することはできません。
  • その列でデフォルト値 (WITH DEFAULT) を指定することはできません。 その列がヌル可能である場合は、列のデフォルト値は NULL 値です。
  • 分散表の分散文節でその列を指定することはできません。
  • パーティション表のパーティション化文節でその列を指定することはできません。
特殊タイプ名 (distinct-type-name)
列のデータ・タイプが、特殊タイプ (ユーザー定義のデータ・タイプ) であることを指定します。 この列の長さ、精度、および位取りは、それぞれ、特殊タイプのソース となっているタイプの長さ、精度、および位取りと同じになります。 スキーマ名なしの特殊タイプを指定すると、その特殊 タイプ名は、SQL パス上のスキーマを検索することで解決されます。
ALLOCATE (整数)
VARCHAR、VARGRAPHIC、VARBINARY、XML、および LOB タイプに関して、それぞれの行の該当列に対して予約するスペースを指定します。 長さが割り振られた値以下の列の値は、行の固定長部分に保管されます。 長さが割り振られた値より長い列の値は、行の可変長部分に保管され、これを検索するためには、余分の入出力操作が必要になります。 割り振ることのできる値の範囲は、1 からストリングの最大長までです が、最大行バッファー・サイズにより制限されます。 最大行バッファー・サイズについては、 最大行サイズを参照してください。 FOR MIXED DATA または混合データの CCSID を指定する場合は、4 からストリングの最大長までが範囲になります。 割り振られる長さを指定しなかった場合は、割り振られる長さに 0 を指定したものと見なされます。 VARGRAPHIC の場合、整数は、DBCS または Unicode GRAPHIC 文字の数になります。 デフォルト値として定数が指定され、ALLOCATE の長さがそのデフォルト値の長さより小さい場合は、ALLOCATE の長さはそのデフォルト値の長さであると見なされます。
FOR BIT DATA
列の値が、コード化文字セットと関連付けられていないこと、および 変換されないことを指定します。 FOR BIT DATA は、CHARACTER または VARCHAR の列にのみ有効です。 FOR BIT DATA を指定した列の CCSID は、65535 です。 FOR BIT DATA は、CLOB 列には使用できません。
FOR SBCS DATA
列の値に、SBCS (1 バイト文字セット) データが入ることを指定します。 FOR SBCS DATA は、表作成時の現行サーバーのデフォルト CCSID が DBCS 対応でない場合、または列の長さが 4未満である場合は、 CHAR、 VARCHAR、および CLOB 列のデフォルト値です。 FOR SBCS DATA は、 CHARACTER、 VARCHAR、または CLOB 列の場合にのみ有効です。 FOR SBCS DATA の CCSID は、表作成時点における現行サーバーのデフォルトの CCSID によって決まります。
FOR MIXED DATA
列の値に、SBCS データと DBCS データの両方が入ることを指定します。 FOR MIXED DATA は、表作成時に現行サーバーのデフォルト CCSID が DBCS 対応で、かつ列の長さが 3より大きい場合には、 CHAR、 VARCHAR、および CLOB 列のデフォルトとなります。 すべての FOR MIXED DATA 列は、 DBCS 混用アプリケーション・サーバー・フィールドです。 FOR MIXED DATA は、CHARACTER、 VARCHAR、または CLOB 列のみに有効です。 FOR MIXED DATA の CCSID は、表作成時点における現行サーバーのデフォルトの CCSID によって決まります。
CCSID 整数
整数で指定した CCSID を持つデータが、列の値に入ることを指定します。 その整数が SBCS CCSID である場合、その列のデータは SBCS データです。 整数が混合データ CCSID である場合、その列は混合データであり、列の長さは 3より大きくなければなりません。 文字カラムの場合は , CCSID は SBCS CCSID または混合データ CCSID でなければなりません。 グラフィックの列の場合は、CCSID は DBCS、UTF-16、または UCS-2 CCSID でなければなりません。 CCSID がグラフィックの列に指定されていない場合は、CCSID は、表の作成時点における現行サーバーのデフォルトの CCSID によって決まります。 XML 列の場合、CCSID は 65535 であってはなりません。 XML 列の CCSID を指定しない場合は、CREATE TABLE の実行時に、SQL_XML_DATA_CCSID QAQQINI オプションの設定に基づいて CCSID が設定されます。 デフォルトの CCSID は 1208 です。 このオプションの説明はXMLの値を参照。 有効なCCSIDのリストについては、CCSIDの値を参照してください。

CCSID 1208 (UTF-8) または 1200 (UTF-16) データには結合文字を含めることができます。 合成文字サポートにより、1 つ以上の文字を組み合わせて 1 文字にすることが可能です。 先頭文字の後、最大 300 個の異なる非スペーシング・アクセント文字 (ウムラウト、アクセントなど) データ・ストリングの後に続けることができます。 結果文字が文字セットで既に定義済みの文字である場合、その文字には複数の表記があります。 正規化 は、合成文字のストリングを定義済みの 16 進値で置き換えます。 これにより、同じ文字が単一の一貫した方法で表記されるようになります。 正規化が実行されない場合、同一に見える 2 つのストリングは等しく比較されません。

NOT NORMALIZED
データはアプリケーションからの受け渡し時に正規化されません。
NORMALIZED
データはアプリケーションからの受け渡し時に正規化されます。
デフォルト
列のデフォルト値を指定します。 この文節は、1 つの列定義 の中で複数回指定することはできません。 Db2® はデフォルト値を生成するため、以下のタイプの列には DEFAULT を指定できません。
  • ROWID 列
  • ID 列 (AS IDENTITY として定義される列)
  • 行変更タイム・スタンプ列
  • 行開始列
  • 行終了列
  • トランザクション開始 ID 列
  • 生成式列
XML 列のデフォルトは、NULL です。ただし、NOT NULL を指定した場合、デフォルトはありません。
DEFAULT キーワードの後に値が指定されていない場合は、次のようになります。
  • 列が NULL 可能の場合、デフォルト値は NULL 値になります。
  • 列が NULL 可能でない場合、デフォルト値は列のデータ・タイプによって決まります。
    データ・タイプ 省略時の値
    数値 0
    固定長文字またはグラフィック・ストリング ブランク
    固定長バイナリー・ストリング 16 進ゼロ
    可変長ストリング 0 のストリング長
    日付 INSERT の時点の当日の日付
    時刻 INSERT の時点の当日の時刻
    タイムスタンプ INSERT の時点の当日のタイム・スタンプ
    変更の開始ブール変更の終わり 変更の開始ブール値 FALSE変更の終わり
    Datalink DLVALUE('','URL','') に対応する値
    特殊タイプ (distinct-type) 特殊タイプの対応するソース・タイプのデフォルト値

NOT NULL および DEFAULT を列の定義 から省いた場合、DEFAULT NULL の暗黙の指定が取られます。

定数
その列のデフォルト値としての定数を指定します。 指定された定数は、代入と比較で説明されているような代入の規則に従って、列に代入され得る値を表していなければなりません。 浮動小数点定数または 10 進浮動小数点定数は、SMALLINT、INTEGER、DECIMAL、または NUMERIC 列に使用してはなりません。 10 進定数には、小数点より右方に、その列に指定された位取りより多くの桁を含めてはなりません。 変更の開始 BOOLEANカラムでは、ブール定数TRUEとFALSEしか使えません。変更の終わり
User
INSERT または UPDATE の時点での USER 特殊レジスターの値を、その列のデフォルト値として指定します。 列のデータ・タイプは、USER 特殊レジスターの長さ属性と同じかそれより 大きい長さ属性を持つ CHAR または VARCHAR でなければなりません。 USER 特殊レジスターの値は、列の CCSID に変換されません。
ヌル
その列のデフォルト値として NULL を指定します。 NOT NULL を指定する場合は、同じ列の定義 内で DEFAULT NULL を指定してはなりません。

データ・リンク列に使用できるデフォルト値は NULL のみです。

CURRENT_DATE
現在の日付を列のデフォルト値として指定します。 CURRENT_DATE を指定する場合は、列のデータ・タイプは DATE または DATE に基づく特殊タイプでなければなりません。
CURRENT_TIME
現在の時刻を列のデフォルト値として指定します。 CURRENT_TIME を指定する場合は、列のデータ・タイプは TIME または TIME に基づく特殊タイプでなければなりません。
CURRENT_TIMESTAMP または CURRENT_TIMESTAMP(integer)
現在のタイム・スタンプを列のデフォルト値として指定します。 CURRENT_TIMESTAMP を指定する場合は、列のデータ・タイプは TIMESTAMP また は TIMESTAMP に基づく特殊タイプでなければなりません。 デフォルトとして使用される CURRENT_TIMESTAMP 特殊レジスター のタイム・スタンプ精度は、この特殊レジスターに指定された精度に関係なく、常に列のタイム・スタンプ精度と 一致します。
キャスト機能名 (cast-function-name)
この形式のデフォルト値を使用できるのは、 強い型付き 特殊タイプ、 BINARY、VARBINARY、 BLOB、 CLOB、 DBCLOB、 DATE、 TIME 、または TIMESTAMP データ・タイプとして定義された列でのみです。 次の表は、これらのキャスト関数 の許可されている使用法を示します。
データ・タイプ キャスト関数名
強い型付き 特殊タイプ N は、 BINARY、 VARBINARY、 BLOB、 CLOB、または DBCLOB に基づいています。 BINARY、VARBINARY、BLOB、CLOB、または DBCLOB *
強い型付き 特殊タイプ N は、DATE、 TIME、または TIMESTAMP に基づいています。 N (N の作成時に生成されたユーザー定義のキャスト関数) **
または
DATE、TIME、または TIMESTAMP *
他のデータ・タイプに基づく 強い型付き 特殊タイプ N N (N の作成時に生成されたユーザー定義のキャスト関数) **
BINARY、VARBINARY、BLOB、CLOB、または DBCLOB BINARY、VARBINARY、BLOB、CLOB、または DBCLOB *
DATE、TIME、または TIMESTAMP DATE、TIME、または TIMESTAMP *
注:

* 関数には、QSYS2 の暗黙的または明示的スキーマ名のデータ・タイプ (または、特殊タイプのソース・タイプ) の名前と一致する名前を指定する必要があります。

** 関数には、列の特殊タイプの名前と一致する名前を指定する必要があります。 スキーマ名で修飾する場合は、特殊タイプのスキーマ名と同じ名前 を指定する必要があります。 修飾しない場合は、関数の解析から得られるス キーマ名は、特殊タイプのスキーマ名と同じ名前にする必要があります。

定数
定数を引数として指定します。 この定数は、特殊タイプのソース・タイプの定数、あるいは、特殊タイプでない場合は、データ・タイプの定数の規則に準拠する必要があります。 BINARY、VARBINARY、 BLOB、 CLOB、DBCLOB、DATE、TIME、および TIMESTAMP 関数の場合は、この定数をストリング定数にする必要があります。
User
INSERT または UPDATE の時点での USER 特殊レジスターの値をその列 のデフォルト値として指定します。 この列の特殊タイプのソース・タイプのデータ・タイプは、USER 特殊 レジスターの長さ属性と同じかそれより大きい長さ属性を持つ CHAR また は VARCHAR でなければなりません。 USER 特殊レジスターの値は、列の CCSID に変換されません。
CURRENT_DATE
現在の日付を列のデフォルト値として指定します。 CURRENT_DATE を指定する場合、列の特殊タイプのソース・タイプのデータ・タイプは、DATE にする必要があります。
CURRENT_TIME
現在の時刻を列のデフォルト値として指定します。 CURRENT_TIME を指定する場合、列の特殊タイプのソース・タイプのデータ・タイプは、TIME にする必要があります。
CURRENT_TIMESTAMP または CURRENT_TIMESTAMP(integer)
現在のタイム・スタンプを列のデフォルト値として指定します。 CURRENT_TIMESTAMP を指定する場合、列の特殊タイプのソース・タイプのデータ・タイプは、TIMESTAMP にする必要があります。 デフォルトとして使用される CURRENT_TIMESTAMP 特殊レジスター のタイム・スタンプ精度は、この特殊レジスターに指定された精度に関係なく、常に列のタイム・スタンプ精度と 一致します。

指定した値が無効である場合、エラーが戻されます。

GENERATED
データベース・マネージャーが列の値を生成することを示します。 列が次のいずれかのタイプの列であると見なされる場合には、GENERATED を指定できます。
  • ID 列
  • 行変更タイム・スタンプ列

列を次のいずれかのタイプの列に統合する場合には、GENERATED を指定する必要があります。

  • 行開始列
  • 行終了列
  • トランザクション開始 ID 列
  • 生成式列
また、列のデータ・タイプが ROWID (または ROWID に基づく特殊タイプ) である場合も、GENERATED を指定できます。 その他の場合は、GENERATED を指定してはなりません。 GENERATED は、列定義内に default-clause とともに指定してはなりません。in
常時
行の挿入時または更新時にデフォルト値を生成しなければならない場合に、データベース・マネージャーが常に列の値を生成することを指定します。 ALWAYS は推奨値です。
デフォルト
行の挿入時または更新時にデフォルト値を生成しなければならない場合に、明示的な値が指定されていない限り、データベース・マネージャーが列の値を生成することを指定します。

ROWID 列の場合、データベース・マネージャーは指定された値を使用しますが、データベース・マネージャーまたは Db2 for iによって以前に生成された有効な固有の行 ID 値でなければなりません。

ID 列または行変更タイム・スタンプ列の場合は、データベース・マネージャーは指定された値を挿入または更新しますが、その ID 列または行変更タイム・スタンプ列がユニーク制約を持っているか、その ID 列または行変更タイム・スタンプ列を単独で指定するユニーク索引を持っている場合を除き、その値がその列の固有な値であるかどうかの検査は行いません。

AS IDENTITY
列が表の識別列であることを指定します。 1 つの表は識別列を 1 つだけ持つことができます。 識別列は、分散表内で使用することはできません。 AS IDENTITY を指定できるのは、列のデータ・タイプが、厳密に位取りがゼロの数値タイプ (SMALLINT、INTEGER、 BIGINT、DECIMAL、または位取りがゼロの NUMERIC、 またはこれらのデータ・タイプに基づく特殊タイプ) である場合だけです。 DECIMAL または NUMERIC データ・タイプが指定された場合、精度は 31 以下でなければなりません。

識別列は、暗黙的に NOT NULL になります。

START WITH数値定数
識別列について生成される最初の値を指定します。 小数点の右側にゼロ以外の数字がないことを条件として、この列に割り当てる ことのできる任意の正または負の値を指定できます。

識別列を定義するときに値を明示的に指定していない場合のデフォルト 値は、昇順の場合は MINVALUE で、降順の場合は MAXVALUE です。 この値は、シーケンスが最大値または最小値に達した後で、シーケンス の循環により到達する値になるとは限りません。 START WITH 文節を使用することにより、この循環に使用される値の範囲外の 値からシーケンスを開始することができます。 循環に使用する範囲は、MINVALUE および MAXVALUE で定義します。

INCREMENT BYnumeric-constant
識別列の連続した値の間隔を指定します。 この値は長整数定数の値を超過せず、かつ小数点の右側にゼロ以外の数字があってはなりません。 値は列に割り当て可能でなければなりません。 デフォルトは、1 です。

この値が 0 または正である場合は、識別列の値の順序は昇順になります。 この値が負の場合は、値の順序は降順になります。

MAXVALUE または MINVALUE
昇順の ID 列が循環するか値の生成を停止する最大値、または降順の ID 列が最小値に達した後で循環する先の最大値を指定します。
MAXVALUE numeric-constant
この ID 列用として生成される最大値を示す数値定数を指定します。 この値には、この列に割り当てることのできる任意の正または負の値を 指定できますが、最小値より大きい値でなければなりません。

識別列を定義するときにこの値を明示的に指定していない場合は、この 値は、昇順シーケンスの場合は該当データ・タイプの最大値になります。 降順シーケンスの場合は、この値は START WITH の値ですが、START WITH を指定していなければ -1 です。

MINVALUEnumeric-constant
この識別列用として生成される最小値を示す数値定数を指定します。 この値には、この列に割り当てることのできる任意の正または負の値を 指定できますが、最大値より小さい値でなければなりません。

識別列を定義するときにこの値を明示的に指定していない場合は、この 値は、昇順シーケンスの場合は START WITH の値ですが、START WITH を指定 していなければ 1 です。降順シーケンスの場合は、この値は、該当データ・ タイプ (および、DECIMAL の場合は精度) の最小値です。

CACHE または NO CACHE
事前割り振りの値をメモリー内に保持するかどうかを指定します。 値を事前に割り振ってキャッシュに保管しておくと、表に行を挿入する ときのパフォーマンスが向上します。
CACHE integer
データベース・マネージャーが事前割り振りしてメモリー内に保持する、識別列シーケンスの値の数を指定します。 指定できる最小の値は 2 で、最大の値は、1 つの整数で表せる最大の値です。 デフォルト値は 20 です。

システム障害のような特定の状態になると、キャッシュに保管されていてコミット済みステートメントでまだ使用されていない ID 列値はすべて失われるため、その後使用されることはありません。 CACHE オプションに指定する値は、こうした状態になった場合に失われる ID 列値の最大数です。

NO CACHE
識別列の値を事前割り振りしないことを指定します。
CYCLE または NO CYCLE
シーケンスの最大値または最小値に達した後も、この識別列について 値を生成し続けるかどうかを指定します。
CYCLE
最大値または最小値に達した後も、この列の値を生成し続けることを指定します。 このオプションを使用した場合は、昇順シーケンスがシーケンスの最大値に 達した後では、最小値が生成されます。 降順シーケンスがシーケンスの最小値に達した後は、最大値が生成されます。 列の最大値と最小値によって、循環に使用される範囲が決まります。

CYCLE が有効であるとき、データベース・マネージャーは ID 列に対して重複する値を生成する可能性があります。 対象の識別列について固有制約または固有索引が存在する場合は、固有でない 値が生成されるとエラーが起こります。

NO CYCLE
シーケンスの最大値または最小値に達した後は、この識別列について 値を生成しないことを指定します。 これはデフォルト値。
ORDER または NO ORDER
識別値を要求された順序で生成するかどうかを指定します。
順序
要求された順序で値を生成することを指定します。
NO ORDER
値を要求された順序で生成する必要がないことを指定します。 これはデフォルト値。
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
列がタイム・スタンプであり、値はデータベース・マネージャーによって生成されることを指定します。 データベース・マネージャーは、行が挿入されるたびに各行の列に値を生成し、また列が更新されるたびに各行に値を生成します。 行変更タイム・スタンプ列に生成される値は、その行の挿入または更新の時刻に対応するタイム・スタンプです。 1 つの SQL ステートメントを指定して複数の行が挿入される場合、行変更タイム・スタンプ列の値は、各行が挿入された時点を反映するために行ごとに異なる可能性があります。 生成された値が固有である保証はありません。
表には、行変更タイム・スタンプ列を 1 つだけ指定できます。 データ・タイプ を指定する場合は、 TIMESTAMP 6 の精度 、または TIMESTAMP 6 の精度でに基づく特殊タイプでなければなりません。 行変更タイム・スタンプ列は、DEFAULT 節を持つことができません。また NOT NULL である必要があります。
AS ROW BEGIN
列がタイム・スタンプ・データを含み、値がデータベース・マネージャーによって生成されることを指定します。 データベース・マネージャーは、行が挿入されるたびに各行の列に値を生成し、また列が更新されるたびに各行に値を生成します。 生成される値は、最新のトランザクションに関連付けられている開始時刻に対応するタイム・スタンプです。 単一 SQL ステートメントで複数の行が挿入される場合、トランザクション開始タイム・スタンプ列の値は各行で同じになります。
システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連した履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、タイム・スタンプ値が調整される可能性があります。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、SYSTIME_PERIOD_ADJ QAQQINI オプションを *ADJUST に設定する必要があります。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。
行開始列は、システム期間テンポラル表で使用するためのもので、SYSTEM_TIME 期間の最初の列として必要です。 1 つの表は 1 つの行開始列しか持てません。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません。 特殊タイプにすることはできません。 この列には DEFAULT 節を指定できないため、NOT NULL として定義する必要があります。 行開始列は更新できません。
AS ROW END
これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は TIMESTAMP '9999-12-30-0.00.00.000000000000' です。 システム期間テンポラル表では、行が削除されると、履歴行の行終了列の値に、行がいつ削除されたかが反映されます。 単一の SQL ステートメントで複数の行が削除される場合、履歴行の列の値は同じになります。
行終了列は、システム期間テンポラル表で使用するためのもので、SYSTEM_TIME 期間の 2 番目の列として必要です。 表には 1 つの行終了列のみを含めることができます。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません。 特殊タイプにすることはできません。 この列には DEFAULT 節を指定できないため、NOT NULL として定義する必要があります。 行終了列は更新できません。
AS TRANSACTION START ID
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合には、その列に NULL 値が割り当てられます。 それ以外の場合、値は、トランザクションの最初のデータ変更ステートメントの実行中に時刻機構の読み取りを使用して生成されます。このステートメントでは、表内の行開始列またはトランザクション開始 ID 列に割り当てられる値を必要とします、そうでない場合、システム期間テンポラル表内の行が削除されます。 単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。
トランザクション開始 ID 列は、システム期間テンポラル表で使用するためのもので、システム期間テンポラル表に必要です。 1 つの表は 1 つのトランザクション開始 ID 列しか持てません。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません。 特殊タイプにすることはできません。 トランザクション開始 ID 列には DEFAULT 節を指定できません。 トランザクション開始 ID 列は更新できません。
DATA CHANGE OPERATION
挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーが値を生成することを指定します。 列には、以下のいずれかの値が含まれます。
I
挿入操作
U
更新操作
D
削除操作
data-type が指定されない場合、 列は CHAR(1) として定義されます。 data-type を指定する場合は、CHAR(1) でなければなりません。 特殊タイプにすることはできません。 この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。
特殊レジスター (special-register)
挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーによって特殊レジスターの値が割り当てられることを指定します。 データ変更ステートメントの時点での特殊レジスターの値が使用されます。 単一の SQL ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。
データ・タイプ は、以下の表に従って定義する必要があります。 特殊タイプにすることはできません。
特殊レジスター 列のデータ・タイプ
CURRENT CLIENT_ACCTNG VARCHAR(255)
CURRENT CLIENT_APPLNAME VARCHAR(255)
CURRENT CLIENT_PROGRAMID VARCHAR(255)
CURRENT CLIENT_USERID VARCHAR(255)
CURRENT CLIENT_WRKSTNNAME VARCHAR(255)
CURRENT SERVER VARCHAR(18)
SESSION_USER VARCHAR(128)
USER VARCHAR(18)
この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。
組み込みグローバル変数 (built-in-global-variable)
挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーによって組み込みグローバル変数の値が割り当てられることを指定します。 データ変更ステートメントの時点での組み込みグローバル変数の値が使用されます。 単一の SQL ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。
データ・タイプ は、以下の表に従って定義する必要があります。 特殊タイプにすることはできません。
組み込みグローバル変数 列のデータ・タイプ
QSYS2.JOB_NAME VARCHAR(28)
QSYS2.SERVER_MODE_JOB_NAME VARCHAR(28)
SYSIBM.CLIENT_HOST VARCHAR(255)
SYSIBM.CLIENT_IPADDR VARCHAR(128)
SYSIBM.CLIENT_PORT INTEGER
SYSIBM.PACKAGE_NAME VARCHAR(128)
SYSIBM.PACKAGE_SCHEMA VARCHAR(128)
SYSIBM.PACKAGE_VERSION VARCHAR(64)
SYSIBM.ROUTINE_SCHEMA VARCHAR(128)
SYSIBM.ROUTINE_SPECIFIC_NAME VARCHAR(128)
SYSIBM.ROUTINE_TYPE CHAR(1)
この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。
NOT NULL
列に NULL 値が入るのを防止します。 NOT NULL を指定しないことは、その列が NULL であってもよいことを意味します。 行変更タイム・スタンプ列、行開始列、および行終了列には、NOT NULL が必要です。
NOT HIDDEN
列が SQL ステートメントの表の暗黙的参照に組み込まれることを示します。 これはデフォルト値。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り、列は SQL ステートメントから不可視であることを示します。 例えば、SELECT * は、結果に隠し列を含みません。 表には、少なくとも 1 つの IMPLICITLY HIDDEN でない列が含まれていなければなりません。
期間定義 (period-definition)
PERIOD FOR
表の期間を定義します。
SYSTEM_TIME (begin-column-nameend-column-name)
システム期間を SYSTEM_TIME という名前で定義します。 表内に名前 SYSTEM_TIME の列があってはなりません。 表に指定できる SYSTEM_TIME 期間は 1 つのみです。
開始列名 (begin-column-name)
行が有効である期間の開始を記録する列を指定します。 この名前は、表内に存在する列を示すものでなければなりません。 begin-column-name は、end-column-name と同じであってはなりません。 begin-column-name は AS ROW BEGIN として定義する必要があります。
エンド・カラム名
行が有効である期間の終了を記録する列を指定します。 システム期間テンポラル表に関連付けられた履歴表で、システム期間テンポラル表の end-column-name に対応する履歴表の列はその行の削除を反映するように設定されます。 この名前は、表内に存在する列を示すものでなければなりません。 end-column-name は AS ROW END として定義する必要があります。
列制約
CONSTRAINT 制約名
制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

基本キー
これは、1 つの列からなる基本キーを定義する簡便な手段です。 列 C の定義に PRIMARY KEY を指定した場合、その効果は、別個の文節として PRIMARY KEY(C) 文節を指定したのと同一です。

この文節は複数の列の定義に指定してはなりません。また列の定義に UNIQUE 文節の指定がある場合には、この文節を指定してはなりません。 この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。 ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。

基本キーを追加すると、CHECK 制約が暗黙的に追加され、その基本キーを構成する列で NULL を使用することはできないという規則が適用されます。

UNIQUE
これは、1 つの列からなるユニーク制約を定義する簡便な手段です。 列 C の定義に UNIQUE の指定がある場合、その効果は、別個の文節として UNIQUE(C) 文節が指定された場合と同一です。

この文節は、1 つの列定義で複数回指定することはできません。また、列定義で PRIMARY KEY が指定されている場合は、この文節を指定してはなりません。 この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。 ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。

references-clause
列定義REFERENCES 文節 は、1 つの列から なる外部キーを定義する簡便な手段です。 列 C の定義に参照文節の指定がある場合、その効果は、C が識別された唯一の列である FOREIGN KEY 文節の一環としてその参照文節が指定されている場合と同一です。 references-clause は、表が 宣言済み一時表、分散表、 または履歴表である場合、許可されません。 この列は行変更タイムスタンプ列であってはなりません。
CHECK (チェック条件)
列定義 の CHECK(検査条件) は、単一の列のみを 参照する検査条件 を持つ検査制約を定義するための簡便な手段です。 したがって、列 C の列定義で CHECK を指定した場合、検査制約の検査 条件 では、C 以外の列を参照することができなくなります。 結果は、 検査制約を別個の文節として指定した場合と同じです。

ON INSERT VIOLATION または ON UPDATE VIOLATION が指定される場合、これらの節の中で列 C が参照される必要があります。

CHECK 制約の中で、FILE LINK CONTROL 列を持つ ROWID、XML、および DATALINK を参照することはできません。 その他の制約事項については、 check-constraintを参照してください。

FIELDPROC
列のフィールド・プロシージャー出口ルーチンとして、外部プログラム名 を指定します。 SQL が含まれていない ILE プログラムを指定する必要があります。 サービス・プログラムを指定することはできません。
このフィールド・プロシージャーは列の値のエンコードとデコードを行います。 列に値が挿入されるときは、フィールド・プロシージャーに渡されてエンコードされて から挿入されます。 列に入っている値が使用されるときは、フィールド・プロシージャーに渡されてデコードされてから使用されます。
フィールド・プロシージャーは、CREATE TABLE ステートメントの 処理中にも呼び出されます。 その場合、プロシージャーは Db2 に列のフィールド記述を提供します。 フィールド記述は、エンコードされた値のデータ特性を定義します。 一方、CREATE TABLE ステートメントで列について指定する情報では、デコードされた値のデータ特性を定義します。
定数
フィールド・プロシージャーの呼び出し時にフィールド・プロシージャーに渡すパラメーターを指定します。 パラメーター・リストはオプションです。
フィールド・プロシージャは、変更の開始BOOLEAN変更の終わり, ROWID, DATALINKである列、または変更の開始BOOLEAN変更の終わり, ROWID, DATALINKに基づく識別型には定義できません。 この列は、ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、および生成式列であってはなりません。 この列に、CURRENT DATE、CURRENT TIME、CURRENT TIMESTAMP、USER のいずれかのデフォルト値が入っていてはなりません。 フィールドのエンコード形式とデコード形式では、NULL 可能性属性が一致している必要があります。 チェック条件でこの列を参照することはできません。ただし、NULL 述部で参照する場合は例外です。 この列が外部キーの一部になっている場合は、対応する親キー列でも同じフィールド・プロシージャーを使用する必要があります。 フィールド・プロシージャは、テーブル内の1つのLOBまたはXML列に対してのみ定義できる。 フィールド・プロシージャの作成方法の詳細については、SQLプログラミングを参照してください。
データ・リンク・オプション
DATALINK データ・タイプに関連したオプションを指定します。
LINKTYPE URL
リンクのタイプを URL として定義します。
NO LINK CONTROL
これを指定すると、リンク済みファイルが存在するか否かを判別する ための検査は行われなくなります。 URL の構文だけが検査されます。 リンク済みファイルに関してデータベース・マネージャー制御は行われません。
FILE LINK CONTROL
これを指定すると、リンク済みファイルの存在を確かめるための検査を行う必要が生じます。 追加のオプションを使用して、データベース・マネージャーにリンク済みファイルに対するより強力な制御権を与えることが可能です。

FILE LINK CONTROL が指定されると、各ファイルは一度だけリンクすることができます。 つまり、その URL を指定できるのは単一の表内の単一の FILE LINK CONTROL 列内だけです。

ファイル・リンク・オプション
リンク済みファイルのデータベース・マネージャー制御のレベルを定義する追加のオプションです。
INTEGRITY
DATALINK 値と実ファイルとの間のリンクの整合性レベルを指定します。
ALL
これを指定すると、DATALINK 値として指定されたどのファイルもデータベース・マネージャーに制御されるようになります。また、標準ファイル・システムのプログラミング・インターフェースを使用してそれらのファイルの削除または名前変更は行うことができなくなります。
READ PERMISSION
DATALINK 値に指定されたファイルの読み取り許可を決定する方法を指定します。
FS
これを指定すると、読み取りアクセス許可は、ファイル・システム許可によって決定されるようになります。 このようなファイルには、列からファイル名を検索しなくてもアクセスできます。
DB
これを指定すると、読み取りアクセス許可は、データベースによって決定されるようになります。 このファイルへのアクセスは、オープン操作において、表から DATALINK 値の検索時に戻される有効なファイル・アクセス・トークンを渡すことでしか許可されません。 READ PERMISSION DB を指定する場合は、WRITE PERMISSION BLOCKED も指定する必要があります。
WRITE PERMISSION
DATALINK 値に指定されたファイルの書き込み許可を決定する方法を指定します。
FS
これを指定すると、書き込みアクセス許可は、ファイル・システム許可によって決定されるようになります。 このようなファイルには、列からファイル名を検索しなくてもアクセスできます。
BLOCKED
これを指定すると、書き込みアクセスがブロックされます。 ファイルは、どのインターフェースを介しても直接更新することはできません。 情報に対して更新を実行するには、代替メカニズムを使用する必要があります。 例えば、ファイルをコピーし、そのコピーを更新してから、その DATALINK 値を更新することで、そのファイルの新しいコピーを指し示します。
RECOVERY
この列の値で参照されるファイルの特定時点リカバリーをデータベース・マネージャーが サポートするか否かを指定します。
NO
これを指定すると、特定時点リカバリーはサポートされません。
ON UNLINK
DATALINK 値の変更または削除 (リンク解除) 時にファイルに対して講じるアクションを指定します。 これは、WRITE PERMISSION FS を使用している場合には適用できないことに注意してください。
復元
これを指定すると、ファイルのリンクが解除されたら、データ・リンク・ファイル・マネージャーは、そのファイルを、それがリンクされた時点で存在していた許可と一緒に所有者に戻そうとします。 その所有者が既にファイル・サーバーへの登録を解除されている場合、この結果は、それらのファイルが収められているファイル・システムによって異なります。 ファイルが AIX® ファイル・システムにある場合、所有者は「dfmunknown」です。 IFS にある場合の所有者は QDLFM です。 これは、INTEGRITY ALL と WRITE PERMISSION BLOCKED も指定されている場合にのみ指定することができます。
削除
これを指定すると、ファイルは、リンク解除の時点で削除されます。 これは、READ PERMISSION DB と WRITE PERMISSION BLOCKED も指定されている場合にのみ指定することができます。
MODE DB2OPTIONS
このモードは、1 組のデフォルト・ファイル・リンク・オプションを定義します。 DB2OPTIONS によって定義されるデフォルト値は、次のとおりです。
  • INTEGRITY ALL
  • READ PERMISSION FS
  • WRITE PERMISSION FS
  • RECOVERY NO

LIKE

table-name または view-name
表の列の名前と記述が、 指定された表 (表名) またはビュー (ビュー名) の列とまったく同じであることを指定します。 この名前は、現行サーバーにある表またはビューを識別するものでなければなりません。

LIKE を使用すると、n 列を暗黙的に定義したことになります。ここで 、n は、指定した表またはビュー内の列の数です。 この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):

  • 列名 (および、システム列名)
  • データ・タイプ、長さ、精度、および位取り
  • CCSID
  • FIELDPROC (table-name のためにコピーされます)

表名 の直後に LIKE 文節を指定し、括弧で囲まなかった場合 は、以下の列属性も含まれます。その他の場合は、これらの属性は含まれません (デフォルト値、識別、行変更タイム・スタンプ、および隠し属性は、コピー・オプションを使用して制御することもできます)。

  • デフォルト値 (表名 が指定され、ビュー名 は指定されていない場合)
  • NULL 可能性
  • 隠し属性
  • カラムの見出しとテキスト(LABELを参照)

列の REFFLD 情報 は、新しい列定義にコピーされます。

table-name に行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列が含まれている場合、新しい表の対応する列はソース列のデータ・タイプのみを継承します。 この新しい列は、生成された列とは見なされません。

暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。 例えば、新しい表に基本キー、外部キー、トリガー、または期間が自動的に組み込まれることはありません。 新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。

指定された表またはビューが非 SQL 作成の物理ファイルまたは論理ファ イルの場合、非 SQL 属性は除去されます。 例えば、日付と時刻の形式は ISO 形式に変更されます。

copy-options

INCLUDING IDENTITY COLUMN ATTRIBUTES または EXCLUDING IDENTITY COLUMN ATTRIBUTES
ID 列の属性を継承するかどうかを指定します。
INCLUDING IDENTITY COLUMN ATTRIBUTES
この表が、選択ステートメント表名、また はビュー名 の結果として生じる列の識別属性 (もしあれば) を 継承することを指定します。 一般に、識別属性がコピーされるのは、表、ビュー、または選択ステートメント の中の対応する列のエレメントが、識別属性を持つ基本表列の名前に直接または間接にマップされる表列またはビュー列の名前である場合です。 INCLUDING IDENTITY COLUMN ATTRIBUTES 文節と AS 選択ステートメント 文節を 指定してあるときは、以下の場合には新規の表の列は識別属性を継承しません。
  • 選択ステートメント の選択リストに、ID 列名の複数の インスタンスが含まれている (つまり同じ列を複数回選択している) 場合。
  • 選択ステートメント の選択リストに、複数の ID 列が含まれている (つまり、結合が複数の ID 列を戻した) 場合。
  • 選択リスト内の式のいずれかに ID 列が含まれている場合。
  • 選択ステートメント に一組の演算 (UNION または INTERSECT) が含まれている場合。

INCLUDING IDENTITY を指定しなかった場合は、表には ID 列は含まれません。

EXCLUDING IDENTITY COLUMN ATTRIBUTES
この表が、全選択表名、または ビュー名 の結果として生じる列の識別属性を継承しないことを指定します。
EXCLUDING COLUMN DEFAULTS または INCLUDING COLUMN DEFAULTS または USING TYPE DEFAULTS
列のデフォルトを継承するかどうかを指定します。
EXCLUDING COLUMN DEFAULTS
ソース表の定義から列のデフォルトを継承しないことを指定します。 新しい表の列のデフォルト値は NULL になるか、またはデフォルト値がなくなります。 列を NULL にできる場合、デフォルトは NULL 値になります。 列を NULL にできない場合はデフォルト値がなくなるため、新しい表に対する INSERT で列の値が指定されない場合はエラーが発生します。
INCLUDING COLUMN DEFAULTS
この表が、選択ステートメント表名、また はビュー名 から生じる列のデフォルト値を継承することを指定します。 一般に、デフォルト値がコピーされるのは、表、ビュー、または選択ステートメント の中の対応する列のエレメントが、デフォルト値を持つ基本表列の名前に直接または間接にマップされる表列またはビュー列の名前である場合です。 デフォルト値は、INSERT で値が指定されていない場合に、列に割り当てられる値です。

USING TYPE DEFAULTS を指定する場合は、INCLUDING COLUMN DEFAULTS を指定しないでください。

INCLUDING COLUMN DEFAULTS を指定しなかった場合は、デフォルト値は継承されません。

USING TYPE DEFAULTS
この表のデフォルト値が、選択ステートメント表名、また はビュー名 から生じる列のデータ・タイプに応じて決まることを指定します。 その列がNULL 可能である場合は、デフォルト値は NULL 値です。 その他の場合は、デフォルト値は以下のようになります。
データ・タイプ 省略時の値
数値 0
固定長文字またはグラフィック・ストリング ブランク
固定長バイナリー・ストリング 16 進ゼロ
可変長ストリング 0 のストリング長
日付 INSERT の時点の当日の日付
時刻 INSERT の時点の当日の時刻
タイムスタンプ INSERT の時点の当日のタイム・スタンプ
変更の開始ブール変更の終わり 変更の開始ブール値 FALSE変更の終わり
Datalink DLVALUE('','URL','') に対応する値
XML デフォルト値はありません
特殊タイプ (distinct-type) 特殊タイプの対応するソース・タイプのデフォルト値

INCLUDING COLUMN DEFAULTS を指定する場合は、USING TYPE DEFAULTS は指定しないでください。

INCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES または EXCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES
暗黙的な隠し列を継承するかどうかを指定します。
INCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES
この表が、選択ステートメント表名、または ビュー名から暗黙的な隠し列を継承することを示します。また、これらの列は、新規の表の暗黙的隠し属性を使用して定義されます。

INCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES を指定しない場合、表は、暗黙的な隠し列を持ちません。

EXCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES
表が、全選択表名、または ビュー名 から、暗黙的な隠し列を継承しないことを指定します。
INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES または EXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
行変更タイム・スタンプ属性が継承されるかどうかを指定します。
INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
この表が、選択ステートメント表名、また はビュー名 の結果として生じる列の行変更タイム・スタンプ属性 (もしあれば) を継承することを指定します。 一般に、行変更タイム・スタンプ属性がコピーされるのは、表、ビュー、または選択ステートメント の中の対応する列のエレメントが、行変更タイム・スタンプ属性を指定する基本表列の名前に直接または間接にマップされる表列またはビュー列の名前である場合です。 INCLUDING ROW COLUMN ATTRIBUTES 文節と AS 選択ステートメント 文節を 指定してあるときは、以下の場合には新規の表の列は、行変更タイム・スタンプ属性を継承しません。
  • 選択ステートメント の選択リストに、行変更タイム・スタンプ列名の複数インスタンスが含まれている (つまり同じ列を複数回選択している) 場合。
  • 選択ステートメント の選択リストに、複数の行変更タイム・スタンプ列が含まれている (つまり、結合が複数の行変更タイム・スタンプ列を戻した) 場合。
  • 選択リスト内の式に行変更タイム・スタンプ列が含まれている場合。
  • 選択ステートメント に一組の演算 (UNION または INTERSECT) が含まれている場合。

INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES を指定しない場合、表は、行変更タイム・スタンプ列を持ちません。

EXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
この表が、全選択表名、またはビュー名 の結果として生じる列の行変更タイム・スタンプ属性 (もしあれば) を継承しないことを指定します。

as-result-table

列名 (column-name)
表の列の名前を指定します。 列名のリストを指定する場合は、そのリストは、選択ステートメント の結果表にある列の数と同じ数の列名で構成されている必要があります。 各 column-name (列名) は、ユニークで、しかも非修飾でなければなりません。 列名のリストを指定しなかった場合、表の列は選択ステートメント の結果表の列の名前を継承します。

選択ステートメント の結果表に重複する列名または無名列がある場合は、列名のリストを指定する必要があります。 無名列は、定数、関数、式、またはセット演算 (UNION または INTERSECT) から生じる名前のない列で、この列には選択リストの AS 文節が使用されます。

FOR COLUMN システム列名
列の IBM i 名を指定します。 表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。

システム列名 が指定されず、また列名が有効なシステム列名 でない場合には、システム列名が生成されます。 システム列名の生成方法について詳しくは、 表の名前の生成の規則を参照してください。

選択ステートメント
表の列の名前および記述を、選択ステートメント を実行した場合 に選択ステートメント の派生結果表に現れる列と同じにすることを指定します。 AS (選択ステートメント) を使用すると、この表について n 個の列を暗黙的に定義したことになります。n は、選択ステートメント の結果として発生する列の数です。

この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):

  • 列名 (および、システム列名)
  • データ・タイプ、長さ、精度、および位取り
  • CCSID
  • NULL 可能性
  • FIELDPROC
  • カラムの見出しとテキスト(LABELを参照)

以下の属性は組み込まれません (一部の属性は、copy-options を使用して組み込むことができます)。

  • 省略時の値
  • 非表示属性
  • 識別属性
  • 行変更タイム・スタンプ属性
  • 行開始、行終了、およびトランザクション開始 ID
  • 生成式

暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。 例えば、新規の表には、表からの基本キーや外部キーは自動的には組み込 まれません。 新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。

選択文節 に 含まれる列で、別の表またはビュー内の列への直接参照であるか、結果属性を変更するための CAST のみを 使用している列には、ファイル・オブジェクト内の定義のために生成される REFFLD 情報 が入ります。

select-statement は変数を参照してはなりません が、グローバル変数を参照することはできます。

選択ステートメント には、PREVIOUS VALUE 式または NEXT VALUE 式を含めてはなりません。 UPDATE、SKIP LOCKED DATA、USE AND KEEP EXCLUSIVE LOCKS の各文節を指定することはできません。

select-statementisolation-clause を含む場合、isolation-clause で指定された分離レベルが SQL ステートメント全体に適用されます。

WITH DATA
選択ステートメント を実行することを指定します。 表の作成後に、選択ステートメント の結果表の行が自動的に表に挿入されます。
WITH NO DATA
選択ステートメント を新しい表の属性を定義する目的のみに使用することを指定します。 選択ステートメント の結果を使用した表へのデータの挿入は行われません。

unique-constraint

CONSTRAINT 制約名
制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

PRIMARY KEY (column-name,…)
指定した列で構成される基本キーを定義します。 テーブルは基本 キーを1つしかもつことができません。 したがって、この文節は複数回指定することはできず、またこの簡便な手法が表の基本キーを定義するのに使用されていた場合には、指定することはできません。 指定する列は、その CREATE TABLE ステートメントで前に指定した他の UNIQUE 制約で指定されている列と同じであってはなりません。 例えば、UNIQUE(B,A) が既に指定されている場合、PRIMARY KEY(A,B) の指定は許されません。

それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。 同じ列を複数回指定することはできません。 この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。 ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。 指定できる列の数は 120 を超えてはならず、それぞれのバイト・カウントの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。 バイト・カウントについては、 表 1を参照してください。

固有索引は、別個のシステム論理ファイルとしてではなく、システム物理 ファイルの一部として作成されます。 基本キーを追加すると、CHECK 制約が 暗黙的に追加され、その基本キーを構成するどの列でも NULL を使用するこ とはできないという規則が適用されます。

UNIQUE (column-name, ...)
識別された列で構成されるユニーク制約を定義します。 UNIQUE 文節は複数回指定しても構いません。 指定する列は、その CREATE TABLE ステートメントで前に指定した他の UNIQUE 制約や PRIMARY KEY で指定されている列と同じであってはなりません。 ある固有制約が他の制約の指定と同一であるか否かを判別するには、その列のリストを対比します。 例えば、UNIQUE(A,B) は UNIQUE(B,A) と同一です。

それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。 同じ列を複数回指定することはできません。 この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。 ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。 指定できる列の数は 120 を超えてはならず、それぞれのバイト・カウントの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。 バイト・カウントについては、 表 1を参照してください。

指定された列に基づく固有索引が、その CREATE TABLE ステートメントの実行過程で作成されます。 固有索引は、別個のシステム論理ファイルとしてではなく、システム物理ファイルの一部として作成されます。

referential-constraint

CONSTRAINT 制約名
制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

FOREIGN KEY
FOREIGN KEY 文節を指定するたびに、参照制約が定義されます。 表が宣言済み一時表または分散表である場合、 FOREIGN KEY は許可されません。
(column-name, ...)
参照制約の外部キーは、指定した列で構成されます。 それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。 同じ列を複数回指定することはできません。 この列は、LOB 列、DATALINK 列、または XML 列であってはならず、また行変更タイム・スタンプ列であってもなりません。 ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。 指定できる列の数は 120 を超えてはならず、その長さの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。
参照親テーブル名
REFERENCES 文節で指定された parent-table-name は、作成される表、またはアプリケーション・サーバーに既に存在する基本表を示すものでなければなりませんが、 カタログ表、宣言済み一時表、分散表、 または履歴表を示すものであってはなりません。 親がパーティション表の場合は、親のユニーク制約を適用するユニーク索引がパーティション化されていてはなりません。

参照制約の外部キー、親キー、および親表が、前に指定した参照制約の外部キー、親キー、および親表と同一である場合は、その参照制約は重複 します。 重複する参照制約は許されますが、お勧めできません。

以下の説明で、T1 は作成される表を指し、T2 は識別された親表を表しています。

指定した外部キーは、T2 の親キーと同じ数の列を持たなければなりません。 外部キーの n 番目の列の記述とその親キーの n 番目の列の記述は、同一のデータ・タイプ、長さ、CCSID、および FIELDPROC を持たなければなりません。

(column-name,...)
参照制約の親キーは、ここで指定する列によって構成されます。 各 column-name は、T2 の列を指定する非修飾名でなければなりません。 同じ列を複数回指定することはできません。 列は LOB、 DATALINK 列、XML 列であってはならず、また、行変更タイム・スタンプ列であってはなりません。 ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。 指定できる列の数は 120 を超えてはならず、それぞれのバイト・カウントの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。 バイト・カウントについては、 表 1を参照してください。

この列名のリストは、T2 の基本キーまたは T2 に存在する UNIQUE 制約の列名のリストと同一でなければなりません。 名前は、基本キーと同じ順序で指定する必要はありません。しかし、外部キー 文節の列のリストに対応する順序で指定する必要があります。 列名のリストの指定がない場合、T2 は基本キーを持たなければなりません。 列名のリストの省略は、基本キーの列の暗黙の指定を意味しています。

FOREIGN KEY 文節によって指定される参照制約は、T2 が親表で、T1 がその従属表である関係を定義します。

ON DELETE
親表の行が削除される時点で、従属表について行うアクションを指定します。 可能なアクションには以下の 5 つがあります。
  • NO ACTION (デフォルト)
  • RESTRICT
  • CASCADE
  • SET NULL
  • SET DEFAULT

外部キーの列に NULL が許される列がある場合を除いて、SET NULL を指定してはなりません。

FILE LINK CONTROL を指定した DATALINK 列が T1 に含まれる場合には、CASCADE を指定してはなりません。

削除規則は、T2 の行が DELETE または波及削除操作の対象で、しかもその行が T1 に従属する行を持っている場合に適用されます。 p は、そのような T2 の行を表すと想定します。

  • RESTRICT または NO ACTION を指定した場合、エラーが生じ、行の削除は行われません。
  • CASCADE を指定すると、 T1 の p の従属行に削除操作が伝搬します。
  • SET NULL が指定された場合、T1 の p のそれぞれの従属行の外部キーの NULL 可能な列が NULL 値に設定されます。 従属表がパーティション化された表である場合や外部キーの列がパーティション・キーの場合も、SET NULL を使用することはできません。
  • SET DEFAULT を指定した場合、T1 の p の各従属行の外部キーの各列は、そのデフォルト値に設定されます。 SET DEFAULT は、従属表がパーティション化された表であり、外部キー列もパーティション・キー である場合は、デフォルトで同じパーティションに行が 保持される場合を除いて、使用することはできません。
ON UPDATE
親表の行が更新される時点で、従属表で行うアクションを指定します。

更新規則は、T2 の行が UPDATE または波及更新操作の対象で、しかもその行が T1 に従属行を持つ場合に適用されます。 p は、そのような T2 の行を表すと想定します。

  • RESTRICT または NO ACTION を指定した場合、エラーが生じ、行の更新は行われません。

check-constraint

CONSTRAINT 制約名
検査制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

CHECK (チェック条件)
検査制約を定義します。 どのような場合も、検査条件 は、表の行ごとに真か不明にする必要があります。

検査条件 は、検索条件 です。ただし、次の条件は除きます。

  • 表の列だけを参照することができます。
  • check-condition で指定する式の結果を、ROWID、XML の各データ・タイプ、または FILE LINK CONTROL を伴う DATALINK データ・タイプにすることはできません。 変更の開始Boolean カラムは式の中では使えません。 さらに、ブール型カラムは、別のブール型カラムとの基本的な比較、またはブール型リテラル値との比較でのみ使用することができます。変更の終わり
  • 次のいずれも含めることはできません。
    • 副照会
    • 集約関数
    • 変更の開始TRY_CAST仕様変更の終わり
    • 変数
    • グローバル変数
    • パラメーター・マーカー
    • シーケンス参照
    • LOB を含む複合式 (連結など)
    • OLAP の指定
    • ROW CHANGE 式
    • 変更の開始Boolean, 変更の終わり IS JSON、JSON_EXISTS、またはREGEXP_LIKE述語
    • 特殊レジスター
    • 強い型付き 特殊タイプの作成によって暗黙的に生成された関数以外のユーザー定義関数
    • 以下の組み込みスカラー関数
ON INSERT VIOLATION
挿入される行の check-condition が false の場合の処置 を指定します。 この節が指定されていないと、 挿入の check-condition が false の場合はエラーが発生します。
SET column-name = DEFAULT (SET 列名 = DEFAULT)
挿入操作で提供される値の代わりに、column-name のデフォルト値が表に 挿入されます。

column-namecheck-condition 内で参照されている必要があります。

ON UPDATE VIOLATION
更新される行に対する check-condition が false の場合の処置 を指定します。 この節が指定されていないと、 更新の check-condition が false の場合はエラーが発生します。
PRESERVE column-name (列名の保存)
column-name の現行値は、更新操作によって提供される値で置き換えられるのではなく、表に 残ります。

column-namecheck-condition 内で参照されている必要があります。

検索条件の詳細については、検索条件を参照してください。 LOB データ・タイプおよび式を含むチェック制約の詳細については、 データベース・プログラミング トピック・コレクションを参照してください。

変更の開始

WITH RESTRICT ON DROP

表をドロップできないことを示します。

QTEMP内のテーブルにこの文節を指定することはできません。

変更の終わり

NOT LOGGED INITIALLY

このステートメントによって作成された表に対して同一作業単位内の INSERT、 DELETE、または UPDATE ステートメントによって行われた変更は、ログ (ジャーナル) に記録されません。

現行作業単位の完了時に NOT LOGGED INITIALLY 属性が非活動化され、後続の作業単位で表に対して行われるすべての操作はログ (ジャーナル) に記録されます。

この NOT LOGGED INITIALLY オプションは、代替ソース (別の表またはファイル) のデータを使用して大きい結果セットを作成する必要があり、かつ表のリカバリーが不要である場合に役立ちます。 このオプションを使用すると、データのロギング (ジャーナリング) のオーバーヘッドを節約できます。

表に FILE LINK CONTROL が指定された DATALINK 列 がある場合、ACTIVATE NOT LOGGED INITIALLY は無視されます。

VOLATILE または NOT VOLATILE

表名 のカーディナリティーを実行時に大きく変えることができるかをオプティマイザーに示します。 揮発性は表の行数に適用され、表そのものに適用されるわけではありません。 デフォルトは NOT VOLATILE です。

VOLATILE
実行時に表名 のカーディナリティーを空から大規模に大きく変えることができることを指定します。 オプティマイザーは表にアクセスするとき、可能であれば通常は索引を使用します。
NOT VOLATILE
table-name のカーディナリティーが揮発性でないことを指定します。 この表を参照するアクセス・プランは、アクセス・プランが構築された時点の表のカーディナリティーに基づいたものになります。 NOT VOLATILE がデフォルトです。

RCDFMT

表のレコード・フォーマット名を示します。

RCDFMT 形式名
表の IBM i レコード・フォーマット名を指定する非修飾名です。 format-name は、システム ID です。

レコード・フォーマット名が指定されない場合、format-name は、表の system-object-name と同一のものになります。

media-preference

表またはパーティションの優先ストレージ・メディアを指定します。

UNIT ANY
どの記憶媒体も優先しません。 使用可能なストレージ・メディアであればどのストレージ・メディアからでも表またはパーティションのストレージが割り振られます。 表で UNIT ANY を指定すると、パーティションで指定する media-preference が使用されます。
UNIT SSD
半導体ディスク記憶媒体を優先します。 ソリッド・ステート・ディスクのストレージ・メディアが使用可能になっていれば、そのソリッド・ステート・ディスクのストレージ・メディアから表またはパーティションのストレージが割り振られます。 表で UNIT SSD を指定すると、パーティションで指定する media-preference は無視されます。

memory-preference

KEEP IN MEMORY
表のデータ が照会で使用されるときに、データを主記憶域プールに入れるかどうかを指定します。
NO
データは主記憶域プールに入れられません。
YES
データは主記憶域プールに入れられます。

ON REPLACE

現行サーバーに存在する表を置き換える場合の処置を指定します。 既存の表が置換されない場合、このオプションは無視されます。

PRESERVE ALL ROWS
指定された表の現在行は保持されます。 WITH DATA が result-table-as で指定されている場合、PRESERVE ALL ROWS は使用できません。

パーティション化された表内のすべてのパーティションのすべての行が保持されます。 新しい表定義が範囲パーティション化された表の場合、定義された範囲は既存のパーティションのすべての行を含むことができなければなりません。

列が除去された場合、その列値は保持されません。 列が変更された場合、その列値を変更することができます。

表がパーティション化された表ではない場合、またはハッシュ・パーティション化された表である場合、PRESERVE ALL ROWS と PRESERVE ROWS は等価です。

PRESERVE ROWS
指定された表の現在行は保持されます。 WITH DATA が result-table-as で指定されている場合、PRESERVE ROWS は使用できません。

範囲パーティション化された表のパーティションが除去された場合、そのパーティションの行は、削除トリガーを処理せずに削除されます。 範囲パーティション化された表のパーティションが除去されるかどうかを判別するために、新しい表定義内のパーティションの範囲定義とパーティション名 (もしあれば) が既存の表定義のパーティションと比較されます。 パーティションの指定された範囲または名前のいずれかが一致すると、それが保持されます。 パーティションに partition-name がない場合、その boundary-spec は、既存のパーティションと一致しなければなりません。

ハッシュ・パーティション表のパーティションが除去された場合、そのパーティションの行は保持されます。

列が除去された場合、その列値は保持されません。 列が変更された場合、その列値を変更することができます。

DELETE ROWS
指定された表の現在の行が削除されます。 既存の DELETE トリガーは起動されません。
表がシステム期間テンポラル表または履歴表の場合、DELETE ROWS は使用できません。

distribution-clause

IN NODEGROUP ノード・グループ名
この表のデータが分散されるノード・グループを指定します。 この名前は、現行サーバーに存在するノード・グループを 示すものでなければなりません。 この文節を指定すると、表は、そのノード・グループのシステムすべて にわたる分散表として作成されます。

LOB 列、DATALINK 列、XML 列、または IDENTITY 列は、分散表内で使用することはできません。

分散表を作成するには、 Db2 マルチシステム 製品をインストールする必要があります。 分散表について詳しくは、「 Db2 マルチシステム 」トピック集を参照してください。

DISTRIBUTE BY HASH (column-name, ...)
パーティション・キーを指定します。 パーティション・キーは、ノード・グループのどのノードに行を置くかを判別するために使用します。 それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。 同じ列を複数回指定することはできません。 DISTRIBUTE BY 文節の指定がない場合、基本キーの最初の列が、パーティション・キーとして使用されます。 基本キーがない場合は、表の最初の列で、浮動小数点、日付、時刻、 あるいはタイム・スタンプではない列が、パーティション・キーとして使用されます。

パーティション・キーを構成する列は、 その表に対して固有の制約を構成する列のサブセットでなければなりません。 パーティション・キーでは、浮動小数点、 日付、時刻、タイム・スタンプ、LOB、XML、DataLink、 ROWID、および、フィールド・プロシージャーがある列を使用することは できません。

partitioning-clause

PARTITION BY RANGE
表に行を挿入する場合、ターゲット・データのパーティションの判別に列値の範囲を使用することを指定します。 パーティションの数は、256 以下でなければなりません。
partition-expression
データのターゲット・データ・パーティションを決定するために範囲を定義する対象のキー・データを指定します。
列名 (column-name)
データ・パーティション・キーの列を識別します。 パーティション・キーは、表内のどのパーティションに行を置くかを判別するために使用します。 column-name は、該当の表の列を識別する非修飾の名前でなければなりません。 同じ列を複数回指定することはできません。

LOB、変更の開始Boolean変更の終わり 、XML、DataLink, ROWID、行変更タイムスタンプ列、identity列、 およびフィールド・プロシージャを持つ列は、パーティショニング・キーでは使用できません。

指定する列数は 120 を超えてはなりません。 列の長さ属性の合計が 2000 を超えてはなりません。

NULLS LAST
NULL 値の比較順位を上位に設定することを指定します。
NULLS FIRST
NULL 値の比較順位を下位に設定することを指定します。
partition-element
データ・パーティション・キーの範囲を指定します。
PARTITION 区画名
データ・パーティションの名前を指定します。 表の他のデータ・パーティションと同じ名前を指定することはできません。

この文節の指定がない場合、固有のパーティション名がデータベース・マネージャーによって生成されます。

境界仕様
範囲パーティションの境界を指定します。 複数のパーティション・キーが指定された場合、 境界は昇順で指定されなければなりません。 範囲はオーバーラップしてはなりません。
開始節
データ・パーティションの範囲の下限を指定します。 指定された開始値の数値は、パーティション化キーの列の値と同じでなければなりません。 最初の boundary-specstarting-clause を指定しない場合は、パーティション・キーの各列で MINVALUE INCLUSIVE がデフォルトとして使用されます。 後続の boundary-specstarting-clause を指定しない場合は、直前の隣接する boundary-specending-clause を組み込む必要があります。 デフォルトは、その ending-clause と同じです (ただし、INCLUSIVE 属性または EXCLUSIVE 属性が逆になります)。
STARTING FROM
この後に、starting-clause を指定します。
定数
パーティション・キーの対応する列のデータ・タイプの定数の規則に準拠する定数を指定します。 この定数は、パーティション・キーの対応する列が特殊タイプでない場合は、 特殊タイプのソース・タイプの規則に準拠する必要があります。 この値は、表の他の境界スペック の範囲内であってはなりません。
MINVALUE
対応する column-name のデータ・タイプで有効な最小値より小さい値を指定します。 MINVALUE を指定した場合、開始文節 内の後続のすべての値も MINVALUE でなければなりません。
MAXVALUE
対応する column-name のデータ・タイプで有効な最大値より大きい値を指定します。 MAXVALUE を指定した場合、終了文節 内の後続のすべての値も MAXVALUE でなければなりません。
包括的
指定した範囲値をデータ・パーティションに含めることを示します。
排他的
指定した範囲値をデータ・パーティションから除外することを示します。 MINVALUE または MAXVALUE が指定されている場合、この指定は無視されます。
終了節 (ending-clause)
データ・パーティションの範囲の上限を指定します。 指定された終了値の数値は、データ・パーティション化キーの列の値と同じでなければなりません。 最後の boundary-spec では、ending-clause を指定する必要があります。 前の boundary-specending-clause を指定しない場合は、後続の隣接する boundary-specstarting-clause を組み込む必要があります。 デフォルトは、その starting-clause と同じです (ただし、INCLUSIVE 属性または EXCLUSIVE 属性が逆になります)。
ENDING AT
この後に、ending-clause を指定します。
定数
パーティション・キーの対応する列のデータ・タイプの定数の規則に準拠する定数を指定します。 この定数は、パーティション・キーの対応する列が特殊タイプでない場合は、 特殊タイプのソース・タイプの規則に準拠する必要があります。 この値は、表の他の境界スペック の範囲内であってはなりません。
MINVALUE
対応する column-name のデータ・タイプで有効な最小値より小さい値を指定します。 MINVALUE を指定した場合、開始文節 内の後続のすべての値も MINVALUE でなければなりません。
MAXVALUE
対応する column-name のデータ・タイプで有効な最大値より大きい値を指定します。 MAXVALUE を指定した場合、終了文節 内の後続のすべての値も MAXVALUE でなければなりません。
包括的
指定した範囲値をデータ・パーティションに含めることを示します。
排他的
指定した範囲値をデータ・パーティションから除外することを示します。 MINVALUE または MAXVALUE が指定されている場合、この指定は無視されます。
EVERY 整数定数
複数のデータ・パーティションが、 整数定数 が各データ・パーティションの範囲の幅を指定する場所に追加されることを指定します。 EVERY が指定された場合、パーティション・キーに指定できるのは単一の SMALLINT、INTEGER、 BIGINT、DECIMAL、NUMERIC、DATE、または TIMESTAMP 列のみです。

最初のデータ・パーティションの開始値が、指定された STARTING 値になります。 以前のパーティション + 整数定数 の開始値が、後続の各パーティションの開始値になります。 開始文節 が EXCLUSIVE を指定した場合、各パーティションの開始値は EXCLUSIVE になります。 そうでない場合、各パーティションの開始値は INCLUSIVE になります。

範囲の各パーティションの終了値は (パーティションの開始値 + 整数定数) になります。 ending-clause が EXCLUSIVE を指定した場合、最後のパーティションの終了値は EXCLUSIVE になります。 そうでない場合、最後のパーティションの終了値は INCLUSIVE になります。 開始値が INCLUSIVE の場合、その他のパーティションの終了値は EXCLUSIVE になります。 そうでない場合、その他のパーティションの終了値は INCLUSIVE になります。

追加するパーティションの数は、 ENDING 値に達するまで整数定数 を繰り返し STARTING 値に追加することによって判別されます。 次に例を示します。

  CREATE TABLE FOO
    (A  INT)
    PARTITION BY RANGE(A)
      (STARTING(1) ENDING(10) EVERY(2))

上記は、次の CREATE TABLE ステートメントと等価です。

  CREATE TABLE FOO
    (A  INT)
    PARTITION BY RANGE(A)
      (STARTING(1) ENDING(2),
       STARTING(3) ENDING(4),
       STARTING(5) ENDING(6),
       STARTING(7) ENDING(8),
       STARTING(9) ENDING(10))

日付およびタイム・スタンプの場合、EVERY 値をラベル付き期間にする必要があります。 次に例を示します。

  CREATE TABLE FOO
    (A  DATE)
    PARTITION BY RANGE(A)
      (STARTING('2001-01-01') ENDING('2010-01-01') EVERY(3 MONTHS))
PARTITION BY HASH
表に行を挿入する場合、ターゲット・データのパーティションの判別にハッシュ関数を使用することを指定します。
(column-name, ...)
パーティション・キーを指定します。 パーティション・キーは、表内のどのパーティションに行を置くかを判別するために使用します。 それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。 同じ列を複数回指定することはできません。

浮動小数点、LOB、XML、日付、時刻、タイムスタンプ、変更の開始Boolean変更の終わり, DataLink, ROWID, identity column, およびフィールド・プロシージャを持つ列は、パーティショニング・キーでは使用できません。

INTO 整数 PARTITIONS
パーティションの数を指定します。 パーティションの数は、256 以下でなければなりません。

materialized-query-definition

列名 (column-name)
表の列の名前を指定します。 列名のリストを指定する場合は、そのリストは、選択ステートメント の結果表にある列の数と同じ数の列名で構成されている必要があります。 各 column-name (列名) は、ユニークで、しかも非修飾でなければなりません。 列名のリストを指定しなかった場合、表の列は選択ステートメント の結果表の列の名前を継承します。

選択ステートメント の結果表に重複する列名または無名列がある場合は、列名のリストを指定する必要があります。 無名列は、定数、関数、式、またはセット演算 (UNION または INTERSECT) から生じる名前のない列で、この列には選択リストの AS 文節が使用されます。

FOR COLUMN システム列名
列の IBM i 名を指定します。 表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。

システム列名 が指定されず、また列名が有効なシステム列名 でない場合には、システム列名が生成されます。 システム列名の生成方法について詳しくは、 表の名前の生成の規則を参照してください。

選択ステートメント
表の列の名前および記述を、選択ステートメント を実行した場合 に選択ステートメント の派生結果表に現れる列と同じにすることを指定します。 AS (選択ステートメント) を使用すると、この表について n 個の列を暗黙的に定義したことになります。n は、選択ステートメント の結果として発生する列の数です。

この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):

  • 列名 (および、システム列名)
  • データ・タイプ、長さ、精度、および位取り
  • CCSID
  • NULL 可能性
  • FIELDPROC
  • カラムの見出しとテキスト(LABELを参照)

以下の属性は組み込まれません。

  • 省略時の値
  • 非表示属性
  • 識別属性
  • 行変更タイム・スタンプ属性
  • 行開始、行終了、およびトランザクション開始 ID
  • 生成式

暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。 例えば、新規の表には、表からの基本キーや外部キーは自動的には組み込 まれません。 新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。

選択ステートメント は、変数、グローバル変数、または組み込みパラメーター・マーカーを参照するものであってはなりません。 select-statement の SELECT 文節の式が列名でない場合は、フィールド・プロシージャーがある列をその式で参照することはできません。

選択ステートメント には、PREVIOUS VALUE 式または NEXT VALUE 式を含めてはなりません。 UPDATE、SKIP LOCKED DATA、USE AND KEEP EXCLUSIVE LOCKS の各文節を指定することはできません。

refreshable-table-options
表がマテリアライズ照会表 であり、REFRESH TABLE ステートメントを使用して 選択ステートメント の結果を表に移植することを指定します。

選択ステートメント が GROUP BY 文節を含むマテリアライズ照会表は、 選択ステートメント で参照された表からのデータを要約します。 このようなマテリアライズ照会表は、サマリー表と呼ばれます。 要約表は、特殊なタイプのマテリアライズ照会表です。

マテリアライズ照会表が定義されると、以下の選択ステートメント 制限が適用されます。

  • 選択ステートメント には、 別のマテリアライズ照会表の参照またはマテリアライズ照会表を参照するビューの参照を含めることはできません。
  • 選択ステートメント には、宣言済み一時表、QTEMP 内の表、プログラム記述ファイル、または FROM 文節の非 SQL 論理ファイルへの参照を含めることはできません。
  • select-statementに data-change-table-referenceを含めることはできない。
  • 選択ステートメント に、別のマテリアライズ照会表または宣言済み一時表を参照するビューの参照を含めることはできません。 ENABLE QUERY OPTIMIZATION を指定してマテリアライズ照会表が定義されると、選択ステートメント には、次の段落で示す制約事項のうちのいずれかを含むビューの参照を含めることはできません。
  • 選択ステートメント には、 DataLink または DataLink が FILE LINK CONTROL である DataLink に基づく特殊タイプがある式を含めることはできません。
  • 選択ステートメント には、精度、DBCS-ONLY、 または DBCS-EITHER を持つバイナリーといった、 SQL データ・タイプではない結果列を含めることはできません。

ENABLE QUERY OPTIMIZATION でマテリアライズ照会表が定義されると、 以下の付加的な選択ステートメント 制限が適用されます。

  • 特殊レジスターを含めてはなりません。
  • 他の非 deterministic 関数を含めてはなりません。
  • ORDER BY 文節を使用できますが、REFRESH によってのみ使用されます。 これによって、マテリアライズ照会表のデータの参照の局所性が改善される場合があります。
  • 副選択がビューを参照する場合、ビュー定義内の選択ステートメント は、これらの制約事項を満たさなければなりません。
DATA INITIALLY DEFERRED
データの作成時に、そのデータをマテリアライズ照会表に挿入しないことを指定します。 REFRESH TABLE ステートメントを使用してマテリアライズ照会表を移植するか、 INSERT ステートメントを使用してデータをマテリアライズ照会表に挿入します。
DATA INITIALLY IMMEDIATE
データの作成時に、そのデータをマテリアライズ照会表に挿入することを指定します。
REFRESH DEFERRED
表内のデータを REFRESH TABLE ステートメントを使用していつでもリフレッシュできるように指定します。 表内のデータは、REFRESH TABLE ステートメントの処理時または最後に更新された時のスナップショットとしての照会の結果のみを反映します。
MAINTAINED BY USER
マテリアライズ照会表がユーザーによって保守されるように指定します。 ユーザーは表に対して INSERT、DELETE、UPDATE、または REFRESH TABLE ステートメントを使用できます。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
このマテリアライズ照会表を最適化に使用できるかどうかを指定します。 デフォルトは ENABLE QUERY OPTIMIZATION です。
ENABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用できるように指定します。 指定した選択ステートメント が照会の最適化のための制約事項を満たしていない場合は、エラーが戻されます。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用できないように指定します。 それでもその表を直接照会することはできます。

select-statement 内で直接または間接に参照されている いずれかの表で行レベルまたは列レベルのアクセス制御がアクティブになっている 場合、作成される表に対して行アクセス制御が暗黙的にアクティブ化 されます。 これにより、マテリアライズ照会表の内容への直接アクセスが制限されます。 表を明示的に参照する照会では、表内にデータがないことを示す警告が 戻されます。 マテリアライズ照会表にアクセスするには、適切な行権限を作成します。またはふさわしいようであれば、マテリアライズ照会表に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL を発行して、行レベルの保護を除去します。

ノート

表の属性 : 表は物理ファイルとして作成されます。 表が作成される場合、ファイル待ち時間とレコード待ち時間の属性は、物理ファイル作成 (CRTPF) コマンドの WAITFILE キーワードと WAITRCD キーワード上に指定されたデフォルト値に設定されます。

SQL 表は、削除済みの行で使用していたスペースが その後の挿入要求で再利用されるように作成されます。 この属性は、コマンドの CHGPF、および REUSEDLT(*NO) パラメーターの指定によって変更することができます。 CHGPF コマンドについて詳しくは、 CL リファレンスを参照してください。

分散表は、その表が配布されるすべてのサーバーで作成されます。 分散表について詳しくは、 Db2 マルチシステムを参照してください。

表のジャーナリング: 表の作成時に、ジャーナリングを自動的に開始することができます。

  • 指定した (STRJRNLIB コマンドを使用して) スキーマ内に表を作成すると、ジャーナリングが暗黙的に開始されます。
  • ジャーナル処理を開始するようにスキーマが指定されていない場合には , QSQJRN という名前のジャーナルがテーブルの作成先と同じスキーマに存在している場合には , ジャーナル処理が開始されます。

表の所有権: SQL 名が指定されている場合、

  • 作成した表が入れられるスキーマと同じ名前のユーザー・プロファイルが存在する場合、表の所有者 はそのユーザー・プロファイルです。
  • その他の場合は、表の所有者 は、このステートメントを実行しているスレッドのユーザー・プロファイルまたは グループ・ユーザー・プロファイルです。

システム名を指定した場合は、表の所有者 は、この ステートメントを実行しているスレッドのユーザー・プロファイルまたはグループ・ユーザー・プロファイルです。

表の権限 : SQL 名を使用する場合 は、表は、*PUBLIC に対するシステム権限 *EXCLUDE を使用して作成されます。 システム名を使用する場合、表は、スキーマの作成権限 (CRTAUT) パラメ ーターによって決められる *PUBLIC に対する権限を使用して作成されます。

表の所有者がグループ・プロファイルのメンバー (GRPPRF キーワード) であり、グループ権限が指定されている (GRPAUT キーワード) 場合は、そのグループ・プロファイルにも、その表に対する権限が与えられます。

REPLACE の規則: 表が REPLACE によって PRESERVE ROWS を使用して再作成される際には、 表の新しい定義が古い定義と比較され、論理的に、二者間の各相違点について、対応する ALTER 操作が実行されます。 DELETE ROWS オプションを使用すると、表は論理的に除去され、再作成されます。 表に従属するオブジェクトが有効である限り、変更は可能です。 詳しくは、ALTER TABLE の 表 1 を参照してください。 列、制約、およびパーティションについては、それらの名前と属性に基づいて比較が実行されます。

列名またはシステム列名のいずれかを修正し、もう一方の名前は変えないままにして、列名とシステム列名を変更することができます。 どちらの名前も既存の列に一致しない場合、新しい列が作成されます。 列名に依存する別のオブジェクトが存在すると、名前変更をできない可能性があります。

新規の定義と既存の定義 同等の ALTER TABLE アクション
列が両方に存在し、属性は同じである 変更なし
列が両方に存在し、属性は異なる ALTER COLUMN
列が新規の表定義にのみ存在する ADD COLUMN
列が既存の表定義にのみ存在する DROP COLUMN RESTRICT
制約
制約が両方に存在し、同じである 変更なし
制約が両方に存在し、異なる DROP constraint RESTRICT および ADD constraint
制約が新規の表定義にのみ存在する ADD 制約
制約が既存の表定義にのみ存在する DROP 制約 RESTRICT
materialized-query-definition
materialized-query-definition が両方に存在し、同じである 変更なし
materialized-query-definition が両方に存在し、異なる ALTER MATERIALIZED QUERY
materialized-query-definition が新規の表定義にのみ存在する ADD MATERIALIZED QUERY
materialized-query-definition が既存の表定義にのみ存在する DROP MATERIALIZED QUERY
partitioning-clause
partitioning-clause が両方に存在し、同じである 変更なし
partitioning-clause が両方に存在し、異なる ADD PARTITION、DROP PARTITION、および ALTER PARTITION
partitioning-clause が新規の表定義にのみ存在する ADD パーティショニング節
partitioning-clause が既存の表定義にのみ存在する DROP PARTITIONING
PERIOD
PERIOD が両方に存在し、同じである 変更なし
PERIOD が新規の表定義にのみ存在する ALTER ADD PERIOD
PERIOD が既存の表定義にのみ存在する
ALTER DROP PERIOD

がシステム期間テンポラル表である場合、期間をドロップすることはできません。
NOT LOGGED INITIALLY
NOT LOGGED INITIALLY が両方に存在する 変更なし
NOT LOGGED INITIALLY が新規の表定義にのみ存在する NOT LOGGED INITIALLY
NOT LOGGED INITIALLY が既存の表定義にのみ存在する 最初にログに記録
VOLATILE
VOLATILE 属性が両方に存在し、同じである 変更なし
VOLATILE 属性が新規の表定義にのみ存在する VOLATILE
VOLATILE 属性が既存の表定義にのみ存在する NOT VOLATILE
media-preference
media-preference が両方に存在し、同じである 変更なし
media-preference が新規の表定義にのみ存在する ALTER メディアプリファレンス
media-preference が既存の表定義にのみ存在する UNIT ANY
memory-preference
memory-preference が両方に存在し、同じである 変更なし
memory-preference が新規の表定義にのみ存在する ALTER メモリ優先
memory-preference が既存の表定義にのみ存在する KEEP IN MEMORY NO
CREATE TABLE ステートメントで指定できない属性はすべて保持されます。
  • 権限を持つユーザーは維持されます。 オブジェクト所有者は変更される可能性があります。
  • 現在のジャーナル監査は保持されます。 ただし、他のオブジェクトと異なり、表の REPLACE では、ZC (オブジェクト変更) ジャーナル監査項目が生成されます。
  • 現行のデータ・ジャーナル処理は保持されます。
  • REPLACE が AS 文節を使用しない限り、コメントおよびラベルと列見出しは保持されます。
  • トリガーは、可能であれば保持されます。 トリガーを保持できない場合は、エラーが戻されます。
  • マスクと許可は、可能であれば保持されます。 マスクや許可を保持できない場合は、エラーが戻されます。
  • テンポラル表 VERSIONING と履歴表は保持されます。
  • 表に従属するビュー、マテリアライズ照会表、および索引は、可能であれば保持されるか、再作成されます。 従属するビュー、マテリアライズ照会表、または索引を保持できない場合は、エラーが戻されます。

ID 列の使用: 表に ID 列がある場合は、データベース・マネージャーは、表に行が挿入されたときに、その列の順次数値を自動的に生成することができます。 したがって、ID 列は基本キーとして最適です。

ID 列と ROWID 列は、どちらにもデータベース・マネージャーが生成する値が含まれるという点で同じです。 ROWID 列は、直接行アクセスに使用すると便利です。 ROWID 列には、ROWID データ・タイプの値が入ります。これは、規則的 に昇順または降順にはならない 40 バイトの VARCHAR 値を戻します。 したがって、ROWID データ値は、社員番号や製品番号の生成など、多く のアプリケーション用途にはあまり適していません。 直接行アクセスを必要としないデータの場合は、一般に ID 列を使用す る方が効果的です。なぜなら、ID 列には既存の数値データ・タイプが含ま れており、ROWID 値には不向きなさまざまな用途に利用できるからです。

表が特定時点の状態に回復されたときに (RMVJRNCHG を使用)、ID 列に ついて生成される値のシーケンスに大きなギャップが生じることがあります。 例えば、増分値が 1 で、時刻 T1 に最後に生成された値が 100 で 、データベース・マネージャーがその後 1000 まで順次、値を 生成する ID 列がある表を想定します。 さらに、この表が時点 T1 にさかのぼって回復されたとします。 この場合、リカバリーの完了後最初に挿入される行の ID 列の値は 1001 に なり、ID 列の値に 100 から 1001 というギャップが生じます。

CYCLE を指定した場合は、列に対して固有制約または固有索引が定義されて いない限り、その列が GENERATED ALWAYS であっても、その列について重複値 が生成されることがあります。

マテリアライズ照会表の作成: マテリアライズ照会表が照会に使用される前にデータを持つようにするには、以下のようにします。

  • DATA INITIALLY IMMEDIATE を使用してマテリアライズ照会表を作成する必要があります。または、
  • 照会最適化を使用不可にした状態でマテリアライズ照会表を作成して、 表のリフレッシュ後に表の照会最適化を使用可能にする必要があります。

CREATE TABLE ステートメントが実行されたときの分離レベルが、マテリアライズ照会表の分離レベルになります。 ISOLATION 文節 を使用して、分離レベルを明示的に指定できます。

暗黙的な非表示列に関する考慮事項: 暗黙的に非表示と定義されている列は、SELECT リスト内で * を指定する照会の結果表の一部にはなりません。 ただし、暗黙的な非表示列を 照会で明示的に参照することはできます。 例えば、暗黙的な非表示列を照会の SELECT リストや述部で参照できます。 さらに、暗黙的な非表示列は、COMMENT ステートメント、CREATE INDEX ステートメント、ALTER TABLE ステートメント、INSERT ステートメント、MERGE ステートメント、または UPDATE ステートメントで明示的に参照できます。 暗黙的な非表示列は、参照制約で参照できます。 列リストを含まない REFERENCES 文節は、親表の主キーを暗黙的に参照します。 親表の主キーに、暗黙的に非表示と定義された列が組み込まれる場合があります。 そのような参照制約を使用可能です。

マテリアライズ照会定義の全選択の SELECT リストで、暗黙的な非表示列を明示的に参照している場合、その列はマテリアライズ照会表の一部になります。

ビュー定義 (CREATE VIEW ステートメント) の全選択の SELECT リストで、暗黙的な非表示列を明示的に参照している場合、その列は当該ビューの一部となりますが、そのビューの列は「非表示」とは見なされません。

トランザクション開始 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 アクションを指定するシステム期間データ・バージョン管理定義。これには関連履歴表の名前が含まれます。 ADD VERSIONING USE HISTORY TABLE history-table-nameを参照してください。

パーティション化された表のパフォーマンス: パーティション化された表のパーティション数が大きくなると、 SQL データ変更および SQL データ・ステートメントのオーバーヘッドも大きくなります。 このオーバーヘッドを最小化するのに必要な最小数のパーティションを持つパーティション化された表を作成する必要があります。

リモート選択ステートメントを使用した表作成: as-result-tableselect-statement は、表を作成するサーバーとは別のサーバー上の 表を参照できます。 これを行うには、3 部構成のオブジェクト名を使用するか、または、表またはビューの 3 部構成の名前を参照するよう定義された別名を 使用します。 select-statement は マテリアライズ照会表に対するものにはできず、その結果は フィールド・プロシージャーが定義された列を含むことはできません。 リモート・サーバーが Db2 for LUW または Db2 for z/OS®の場合、 copy-options は許可されません。 リモート・サーバーが Db2 for LUW の場合、AS キーワードの前に列リストを明示的に指定する必要があります。

代替構文: 以下のキーワードは、旧リリースとの互換性を維持するためにサポートされている同義語です。 これらのキーワードは標準キーワードではないので、原則として使用しないようにしてください。

  • INLINE LENGTH は ALLOCATE の同義語です。
  • 参照制約 内の FOREIGN KEY キーワードの後に 制約名 (CONSTRAINT キーワードなし) を指定することもできます。
  • DEFINITION ONLY は WITH NO DATA の同義語です。
  • PARTITIONING KEY は DISTRIBUTE BY HASH の同義語です。
  • PART は PARTITION の同義語です。
  • PARTITION パーティション名 の代わりに、 PARTITION パーティション番号 を指定できます。 partition-number では、CREATE TABLE ステートメントで既に指定されているパーティションを指定することはできません。

    partition-number を指定しない場合は、データベース・マネージャーによって固有のパーティション番号が生成されます。

  • VALUES は ENDING AT の同義語です。
  • マテリアライズ照会表の作成時の CREATE と TABLE の間の SUMMARY です。

最大行サイズ

最大行サイズについては、列定義 の記述で参照される制約 事項が 2 つあります。

  • 最大行バッファー・サイズは 32766、あるいは VARCHAR、VARGRAPHIC、VARBINARY、LOB、または XML 列が指定されている場合は 32740 です。
  • LOB または XML 列が指定されている場合の最大行データ・サイズは、3 758 096 383 です。このサイズは、行が挿入または更新されるときに決定されます。 LOB または XML 列が指定されていない場合の最大行データ・サイズは 32766 で、VARCHAR 列、VARGRAPHIC 列、または VARBINARY 列が指定されている場合の最大行データ・サイズは 32740 です。

行バッファーおよび行データ、またはその両方の長さを決定するには、そのデータ・タイプのバイト数に基づいて、その行のそれぞれの列に対応する長さを加算します。

次の表は、NULL 値が使用できない列に関して、データ・タイプごとの列のバイト・カウントを示します。 NULL 値が許される列であればどのような列であっても、8 つの列ごとに 1 バイトが必要になります。 フィールド・プロシージャーがある列の場合は、そのフィールド・プロシージャーの結果に基づいてカウントが変わる可能性もあります。

表 1. データ・タイプ別の列のバイト・カウント
データ・タイプ 行バッファー・バイト・カウント 行データ・バイト・カウント
SMALLINT 2 2
INTEGER 4 4
BIGINT 8 8
DECIMAL ( p, s) (p/2) + 1 の整数部分 (p/2) + 1 の整数部分
NUMERIC ( ps) P P
FLOAT (単精度) 4 4
FLOAT (倍精度) 8 8
DECFLOAT(16) 8 8
DECFLOAT(34) 16 16
CHAR ( n) n n
VARCHAR ( n) n+ 2 n+ 2
CLOB ( n) 29 +パッド n+29
GRAPHIC (n) n* 2 n* 2
VARGRAPHIC (n) n* 2 + 2 n* 2 + 2
DBCLOB ( n) 29 +パッド n* 2 + 29
BINARY ( n) n n
VARBINARY ( n) n+ 2 n+ 2
BLOB ( n) 29 +パッド n+29
日付 10 4
時刻 8 3
TIMESTAMP (p) p が 0 の場合は 19、 それ以外の場合は 20+p ((p+1)/2) の整数部分 + 7
変更の開始BOOLEAN変更の終わり 変更の開始1変更の終わり 変更の開始1変更の終わり
データ・リンク ( n) n+24 n+24
ROWID 42 28
XML 29 +パッド 2 147 483 647
特殊タイプ (distinct-type) ソース・タイプのバイト・カウント ソース・タイプのバイト・カウント
注:

埋め込み は、境界合わせに必要な 1 から 15 の値です。

データベースに記述される精度

  • 浮動小数点フィールドは、 Db2 for i データベースでビット精度ではなく 10 進精度で定義されます。 ビット数による精度を 10 進精度に変換するには、10 進精度 = CEILING(n/3.31) (n は、変換するビット数) という算式を使用します。 10 進精度は、対話式 SQL を使用した場合に、表示される数値の桁数を決めるのに使用されます。
  • SMALLINT (短整数) フィールドは、10 進精度 (4,0) で保管されます。
  • INTEGER (整数) フィールドは、10 進精度 (9,0) で保管されます。
  • BIGINT フィールドは、10 進精度 (19,0) で保管されます。

LONG VARCHAR、LONG VARGRAPHIC、および LONG VARBINARY

非標準構文である LONG VARCHAR、LONG VARGRAPHIC、および LONG VARBINARY がサポートされていますが、これは使用しないようにしてください。 標準構文である VARCHAR(整数)、VARGRAPHIC(整数)、および VARBINARY(整数) の方が優先されます。 したがって、VARCHAR(整数)、VARGRAPHIC(整数)、および VARBINARY(整数) を使用することをお勧めします。 CREATE TABLE ステートメントの処理後、データベース・マネージャーは、LONG VARCHAR 列を VARCHAR、LONG VARGRAPHIC 列を VARGRAPHIC、そして LONG VARBINARY 列を VARBINARY と見なして処理を進めます。 最大長は、移植不能な製品固有の方式で計算されます。

LONG VARCHAR 1
行内で使用可能なスペースの量によって最大長が決まる可変長文字ストリングを示します。
長いヴァーグラフィック 1
行内で使用可能なスペースの量によって最大長が決まる可変長グラフィック・ストリングを示します。
ロング・ヴァーバイナリー 1
行内で使用可能なスペースの量によって最大長が決まる可変長バイナリー・ストリングを示します。

LONG 列の最大長は、次のようにして決まります。 ただし、

  • i は、表のすべての列 (ただし、LONG VARCHAR、LONG VARGRAPHIC、または LONG VARBINARY でもない) の行バッファー・バイト数の合計とする。
  • j は、表の LONG VARCHAR、LONG VARGRAPHIC、および LONG VARBINARY の列の数とする。
  • k は、該当の行で NULL が使用可能な列の数とする。

LONG VARCHAR および LONG VARBINARY 列それぞれの長さは、INTEGER((32716 - i-((k+7)/8))/j) になります。

それぞれの LONG VARGRAPHIC 列の長さは、 LONG VARCHAR 列に対して計算された長さを 2 で除算することによって示されます。 結果の整数部分は長さです。

システム名の生成規則

システムがシステム表、ビュー、索引、または列名を生成する場合は、特定の方法があります。 以下の各項では、これらの方法およびシステム名生成規則について説明します。

列名の生成の規則

システム列名は、表またはビューの作成時点でそのシステム列名の指定がなく、しかも、列名が有効なシステム列名でない場合に生成されます。

列名に特殊文字が入っておらず、しかもその長さが 10 桁を超える場合には、10 桁のシステム列名が次のように生成されます。

  • その名前の最初の 5 文字
  • 5 桁の固有の番号

次に例を示します。

The system-column-name for LONGCOLUMNNAME would be LONGC00001

列名が区切られている場合には、

  • 区切り文字と区切り文字の範囲内にある文字から、最初の 5 文字がシステム列名の最初の 5 文字として使用されます。 その範囲内の文字の数が、5 文字以下の場合には、その名前の右側は、下線 (_) で埋められます。 小文字は、大文字に変換されます。 システムカラム名の中で有効な文字は A-Z , 0-9, @, #, $, および _だけです。その他の文字は、下線 (_) 文字に変更されます。 この結果、最初の文字が下線になる場合、最初の文字は文字 Q に変えられます。
  • 上記の 5 桁の文字に 5 桁の固有の番号が付加されます。

次に例を示します。

   The system-column-name for "abc" would be ABC__00001
   The system-column-name for "COL2.NAME" would be COL2_00001
   The system-column-name for "C 3" would be C_3__00001
   The system-column-name for "??" would be Q____00001
   The system-column-name for "*column1" would be QCOLU00001

表名の生成の規則

表、ビュー、別名、 または索引が FOR SYSTEM NAME 節を使用せずに作成され、以下のいずれかの名前 である場合、システム名が作成されます。

  • 長さが 10 桁を超える名前
  • システム名での使用が有効でない文字を含む名前

SQL 名、または対応するシステム名はいずれも、SQL ステートメントで使用して、作成済みの該当ファイルのアクセスに用いることができます。 ただし、SQL 名は Db2 for i によってのみ認識され、他の環境ではシステム名を使用する必要があります。

システム名を生成するには 2 つの方法があります。

  • QGENOBJNAM と呼ばれるデータ域が表が作成されたのと同一のスキーマに存在する場合、ユーザーは生成される名前を変更することができます。

    データ域には、次のような制限があります。

    • ユーザーには、データ域を読み取る権限がなければならない。
    • データ域は、CHAR(10) の属性を持っていなければならない。
    • データ域値の最初の 5 文字は '?????'でなければなりません。
    • データ域値の次の 5 文字は、5 桁の数値でなければならない。

    上記の条件のいずれかが満たされない場合、またはデータ域の開始値にアクセスしている最中に何らかのエラーが発生した場合は、データ域が存在しなかった場合と同様に、デフォルト名生成規則が使用されます。

    データ域が上記のすべての制約事項を満たした場合、生成される名前は、下記のデフォルト名生成規則と同様になります。ただし、名前の先頭の 5 (または 4) 文字の後の固有番号には、(「00001」または「0001」の代わりに) 最初にデータ域で指定された 5 桁が入ります。

    例えば、データ域の値が「?????00999」だった場合。

       The system name for "??" would be "__00999"
       The system name for "longtablename" would be "lon00999"
       The system name for "LONGTableName" would be LONG00999
       The system name for "A b   " would be "A_b00999"
  • それ以外の場合は、デフォルト名生成規則が使用されます。

    名前に特殊文字が含まれておらず、その長さが 10 桁を超えている場合には、次のように 10 桁のシステム名が生成されます。

    • その名前の最初の 5 文字
    • 5 桁の固有の番号

    次に例を示します。

       The system name for LONGTABLENAME would be LONGT00001

    その SQL 名に特殊文字が入っている場合、システム名の生成は次のようになります。

    • その名前の最初の 4 文字
    • 4 桁の固有の番号

    さらに,以下も適用されます。

    • 特殊文字は、すべて下線 (_) に置き換えられます。
    • 末尾ブランクは、すべてその名前から除去されます。
    • その名前を有効なシステム名にする上で区切り文字が必要になる場合には、その名前は二重の引用符 (") によって区切られます。

    次に例を示します。

       The system name for "??" would be "__0001"
       The system name for "longtablename" would be "long0001"
       The system name for "LONGTableName" would be LONG0001
       The system name for "A b   " would be "A_b0001"

    SQL は相互参照ファイルを検索して、システム名が固有であることを保証します。 ある名前が既に相互参照ファイルに存在している場合、その名前が固有の 名前になるまで、その番号を増やします。

    上記の規則を使用しても固有名を決められない場合は、名前の番号の桁数を 1 桁追加して、固有名になるまで、または範囲の限界に達するまで、番号を増分します。 例えば、"longtablename" を作成しているときに、"long0001" から "long9999" が既に存在する場合、名前は "lon00001" になります。

例 1: データベース管理者権限を指定して、「ROSSITER.INVENTORY」には、以下の列があります。

部品番号
短整数、NULL 不可
説明
0 から 24 の文字、NULL 可
在庫数量、
整数、NULL 可
  CREATE TABLE ROSSITER.INVENTORY
    (PARTNO         SMALLINT     NOT NULL,
     DESCR          VARCHAR(24),
     QONHAND        INT)

例 2: DEPARTMENT という名前の表を作成します。この表は、次のような列から構成されます。

部門番号
3 文字長で、NULL は使用できない。
部門名
0 から 36 文字長で、NULL は使用できない。
管理者番号
6 文字長
管理部門
3 文字長で、NULL は使用できない。
ロケーション名
16 文字長で NULL を使用できる。

基本キーは、列 DEPTNO です。

  CREATE TABLE DEPARTMENT
    (DEPTNO    CHAR(3)     NOT NULL,
     DEPTNAME  VARCHAR(36) NOT NULL,
     MGRNO     CHAR(6),
     ADMRDEPT  CHAR(3)     NOT NULL,
     LOCATION  CHAR(16),
     PRIMARY KEY(DEPTNO))

例 3: ビュー PRJ_LEADER の列と同じ列定義に従って、REORG_PROJECTS という名前の表を作成します。

  CREATE TABLE REORG_PROJECTS
    LIKE PRJ_LEADER

例 4: EMP_NO という ID 列を持つ EMPLOYEE2 表を作成します。 Db2 for i が常に列の値を生成するように、ID 列を定義します。 割り当てる最初の値および後に生成される連続番号の間の増分差に対して、 デフォルト値である 1 を使用します。

  CREATE TABLE EMPLOYEE2
    ( EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
      ID SMALLINT,
      NAME CHAR(30),
      SALARY DECIMAL(5,2),
      DEPTNO SMALLINT)

例 5: TRANS という名前の非常に大きいトランザクション表に、 会社に処理されるトランザクション処理ごとに 1 つの行が含まれると想定します。 表は、多くの列で定義されます。 日付およびトランザクションの量に関する毎日のサマリー・データが含まれる、 マテリアライズ照会表を作成します。

  CREATE TABLE STRANS
    AS (SELECT  YEAR AS SYEAR, MONTH AS SMONTH, DAY AS SDAY, SUM(AMOUNT) AS SSUM
        FROM TRANS
        GROUP BY YEAR, MONTH, DAY )
    DATA INITIALLY DEFERRED
    REFRESH DEFERRED
    MAINTAINED BY USER 

例 6: SYSTEM_TIME 期間を使用する表 policy_info を作成し、履歴表 hist_policy_info を作成します。 次に、policy_info 表を hist_policy_info table 表に関連付ける ALTER TABLE ステートメントを発行します。

CREATE TABLE policy_info
    (policy_id CHAR(10) NOT NULL,
     coverage INT NOT NULL,
     sys_start TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN,
     sys_end TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END,
     create_id TIMESTAMP(12) GENERATED ALWAYS AS TRANSACTION START ID,
     PERIOD SYSTEM_TIME(sys_start,sys_end))

CREATE TABLE hist_policy_info
    (policy_id CHAR(10) NOT NULL,
     coverage INT NOT NULL,
     sys_start TIMESTAMP(12) NOT NULL,
     sys_end TIMESTAMP(12) NOT NULL,
     create_id TIMESTAMP(12))

ALTER TABLE policy_info
	ADD VERSIONING USE HISTORY TABLE hist_policy_info  
LIKE について生成属性はコピーされないため、履歴表は以下の方法でも作成できます。
CREATE TABLE hist_policy_info
      LIKE policy_info 
1 このオプションは、他の製品との互換性のために提供されています。 代わりに VARCHAR(整数)、 VARGRAPHIC(整数)、または VARBINARY(整数 ) を指定することをお勧めします。