CREATE TABLE ステートメントは表を定義します。 定義には、その表の名前と、その列の名前および属性を含める必要があります。 定義には、主キーやチェック制約など、表の他の属性を含めることができます。
作成済み一時表を作成するには、CREATE GLOBAL TEMPORARY TABLE ステートメントを使用します。宣言済み一時表を宣言するには、DECLARE GLOBAL TEMPORARY TABLE ステートメントを使用します。
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
副表を定義する場合には、許可 ID は表階層のルート表の所有者と同じでなければなりません。
>>-CREATE TABLE--table-name-------------------------------------> >--+-| element-list |----------------------------+--●-----------> +-OF--type-name1--+-------------------------+-+ | '-| typed-table-options |-' | +-LIKE--+-table-name1-+--+------------------+-+ | +-view-name---+ '-| copy-options |-' | | '-nickname----' | +-| as-result-table |--+------------------+---+ | '-| copy-options |-' | +-| materialized-query-definition |-----------+ '-| staging-table-definition |----------------' >--+----------------------------------------------------------------------+--> | .-,-------------------------. | | .-DIMENSIONS-. V | | '-ORGANIZE BY--+-+------------+--(----+-column-name-----------+-+--)-+-' | | .-,-----------. | | | | V | | | | '-(----column-name-+--)-' | +-KEY SEQUENCE--| sequence-key-spec |-----------------+ '-INSERT TIME-----------------------------------------' >--●--+---------------------------+--●--------------------------> '-DATA CAPTURE--+-NONE----+-' '-CHANGES-' >--+------------------------+--●--+-------------------------+---> '-| tablespace-clauses |-' '-| distribution-clause |-' >--●--+-------------------------+-------------------------------> '-| partitioning-clause |-' .-COMPRESS NO---------------. >--●--+---------------------------+--●--+-------------------+---> | .-ADAPTIVE-. | '-VALUE COMPRESSION-' '-COMPRESS YES-+----------+-' '-STATIC---' >--●--+-----------------------+--●--+----------------------+----> '-WITH RESTRICT ON DROP-' '-NOT LOGGED INITIALLY-' >--●--+--------------------+------------------------------------> '-CCSID--+-ASCII---+-' '-UNICODE-' >--●--+------------------------------+--●-----------------------> '-SECURITY POLICY--policy name-' >--+-------------------------------------------------------+--->< | .-,----------------------------------. | | V | | '-OPTIONS--(----table-option-name--string-constant-+--)-' element-list .-,------------------------------. V | |--(----+-| column-definition |------+-+--)---------------------| +-| period-definition |------+ +-| unique-constraint |------+ +-| referential-constraint |-+ '-| check-constraint |-------' column-definition |--column-name--+-------------------+--+--------------------+---| | (1) | '-| column-options |-' '-| data-type |-----' data-type |--+-| built-in-type |------+-----------------------------------| | (2) | +-distinct-type-name-----+ +-structured-type-name---+ '-REF--(type-name2)------' built-in-type |--+-+-SMALLINT----+-----------------------------------------------------------------+--| | +-+-INTEGER-+-+ | | | '-INT-----' | | | '-BIGINT------' | | .-(5,0)-------------------. | +-+-+-DECIMAL-+-+--+-------------------------+------------------------------------+ | | '-DEC-----' | | .-,0-------. | | | '-+-NUMERIC-+-' '-(integer-+----------+-)-' | | '-NUM-----' '-,integer-' | | .-(53)------. | +-+-FLOAT--+-----------+--+-------------------------------------------------------+ | | '-(integer)-' | | | +-REAL------------------+ | | | .-PRECISION-. | | | '-DOUBLE--+-----------+-' | | .-(34)-. | +-DECFLOAT--+------+--------------------------------------------------------------+ | '-(16)-' | | .-(1 BYTE)------------. | +-+-+-+-CHARACTER-+--+---------------------+----------+--+--------------------+-+-+ | | | '-CHAR------' | .-BYTE-. | | | (3) | | | | | | '-(integer-+------+-)-' | '-------FOR BIT DATA-' | | | | | .-BYTE-. | | | | | '-+-VARCHAR----------------+--(integer-+------+-)-' | | | | '-+-CHARACTER-+--VARYING-' | | | | '-CHAR------' | | | | .-(1M)-------------. | | | '-+-CLOB------------------------+--+------------------+-----------------------' | | '-+-CHARACTER-+--LARGE OBJECT-' '-(integer-+---+-)-' | | '-CHAR------' +-K-+ | | +-M-+ | | '-G-' | | .-(1)-------. | +-+-GRAPHIC--+-----------+-------+------------------------------------------------+ | | '-(integer)-' | | | +-VARGRAPHIC--(integer)--------+ | | | .-(1M)-------------. | | | '-DBCLOB--+------------------+-' | | '-(integer-+---+-)-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(1)-------. | +-+-+-+-NCHAR-------------------+--+-----------+------+-------+-------------------+ | | | '-NATIONAL--+-CHAR------+-' '-(integer)-' | | | | | | '-CHARACTER-' | | | | | '-+-NVARCHAR-------------------------+--(integer)-' | | | | +-NCHAR VARYING--------------------+ | | | | '-NATIONAL--+-CHAR------+--VARYING-' | | | | '-CHARACTER-' | | | | .-(1M)-------------. | | | '-+-NCLOB---------------------------+--+------------------+-' | | +-NCHAR LARGE OBJECT--------------+ '-(integer-+---+-)-' | | '-NATIONAL CHARACTER LARGE OBJECT-' +-K-+ | | +-M-+ | | '-G-' | | .-(1M)-------------. | +-+-BLOB----------------+--+------------------+-----------------------------------+ | '-BINARY LARGE OBJECT-' '-(integer-+---+-)-' | | +-K-+ | | +-M-+ | | '-G-' | +-+-DATE-------------------------+------------------------------------------------+ | +-TIME-------------------------+ | | | .-(--6--)-------. | | | '-TIMESTAMP--+---------------+-' | | '-(--integer--)-' | +-XML-----------------------------------------------------------------------------+ | .-SYSPROC.-. (4) (5) | '-+----------+--DB2SECURITYLABEL--------------------------------------------------' column-options .--------------------------------------------------------------------------------------------------. V | |----+----------------------------------------------------------------------------------------------+-+--| +-NOT NULL-------------------------------------------------------------------------------------+ | (6) | +-| lob-options |------------------------------------------------------------------------------+ | (7) | +-SCOPE--+-typed-table-name-+------------------------------------------------------------------+ | '-typed-view-name--' | +-+-----------------------------+--+-+-PRIMARY KEY-+-----------------------------------------+-+ | '-CONSTRAINT--constraint-name-' | '-UNIQUE------' | | | +-| references-clause |-----------------------------------+ | | '-CHECK--(--check-condition--)--| constraint-attributes |-' | | (8) | +-----+-| default-clause |---+-----------------------------------------------------------------+ | '-| generated-clause |-' | | (9) | +-INLINE LENGTH--integer-----------------------------------------------------------------------+ +-COMPRESS SYSTEM DEFAULT----------------------------------------------------------------------+ | .-COLUMN-. | +-+--------+--SECURED WITH--security-label-name------------------------------------------------+ | .-NOT HIDDEN--------. | '-+-IMPLICITLY HIDDEN-+------------------------------------------------------------------------' lob-options .-LOGGED-----. .-NOT COMPACT-. |--●--+------------+--●--+-------------+--●---------------------| '-NOT LOGGED-' '-COMPACT-----' references-clause |--REFERENCES--+-table-name-+--+-----------------------+--------> '-nickname---' | .-,-----------. | | V | | '-(----column-name-+--)-' >--| rule-clause |--| constraint-attributes |-------------------| rule-clause .-ON DELETE NO ACTION-----. .-ON UPDATE NO ACTION-. |--●--+-------------------------+--●--+---------------------+--●--| '-ON DELETE--+-RESTRICT-+-' '-ON UPDATE RESTRICT--' +-CASCADE--+ '-SET NULL-' constraint-attributes .-ENFORCED----------------------. |--●--+-------------------------------+--●----------------------> | .-TRUSTED-----. | '-NOT ENFORCED--+-------------+-' '-NOT TRUSTED-' .-ENABLE QUERY OPTIMIZATION--. >--+----------------------------+--●----------------------------| '-DISABLE QUERY OPTIMIZATION-' default-clause .-WITH-. |--+------+--DEFAULT--+--------------------+--------------------| '-| default-values |-' default-values |--+-constant-------------------------------------------+-------| +-datetime-special-register--------------------------+ +-user-special-register------------------------------+ +-CURRENT SCHEMA-------------------------------------+ +-CURRENT MEMBER-------------------------------------+ +-NULL-----------------------------------------------+ +-cast-function--(--+-constant------------------+--)-+ | +-datetime-special-register-+ | | +-user-special-register-----+ | | '-CURRENT SCHEMA------------' | +-EMPTY_CLOB()---------------------------------------+ +-EMPTY_DBCLOB()-------------------------------------+ +-EMPTY_NCLOB()--------------------------------------+ '-EMPTY_BLOB()---------------------------------------' generated-clause .-ALWAYS-----. |--+-GENERATED--+------------+--+-| identity-options |---------------+--+--| | '-BY DEFAULT-' '-| as-row-change-timestamp-clause |-' | | .-ALWAYS-. | '-GENERATED--+--------+--+-| as-generated-expression-clause |------+-' +-| as-row-transaction-timestamp-clause |-+ '-| as-row-transaction-start-id-clause |--' identity-options |--AS IDENTITY--+-----------------------------------------------------------+--| | .---------------------------------------------. | | V (10) .-1----------------. | | '-(-----------+-START WITH--+-numeric-constant-+---+-+----)-' | .-1----------------. | +-INCREMENT BY--+-numeric-constant-+-+ | .-NO MINVALUE----------------. | +-+-MINVALUE--numeric-constant-+-----+ | .-NO MAXVALUE----------------. | +-+-MAXVALUE--numeric-constant-+-----+ | .-NO CYCLE-. | +-+-CYCLE----+-----------------------+ | .-CACHE 20----------------. | +-+-NO CACHE----------------+--------+ | '-CACHE--integer-constant-' | | .-NO ORDER-. | '-+-ORDER----+-----------------------' as-row-change-timestamp-clause (11) |---------FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP--------| as-generated-expression-clause |--AS--(--generation-expression--)------------------------------| as-row-transaction-timestamp-clause (12) |---------AS--ROW--+-BEGIN-+------------------------------------| '-END---' as-row-transaction-start-id-clause (13) |---------AS--TRANSACTION START ID------------------------------| period-definition |--PERIOD--+-SYSTEM_TIME---+--(--begin-column-name--,--end-column-name--)--| '-BUSINESS_TIME-' unique-constraint |--+-----------------------------+--+-UNIQUE------+-------------> '-CONSTRAINT--constraint-name-' '-PRIMARY KEY-' .-,---------------. V | >--(------column-name---+--+------------------------------------+--)--| '-,--BUSINESS_TIME--WITHOUT OVERLAPS-' referential-constraint |--+-----------------------------+--FOREIGN KEY-----------------> '-CONSTRAINT--constraint-name-' .-,-----------. V | >--(----column-name-+--)--| references-clause |-----------------| check-constraint |--+-----------------------------+------------------------------> '-CONSTRAINT--constraint-name-' >--CHECK--(--| check-condition |--)-----------------------------> >--| constraint-attributes |------------------------------------| check-condition |--+-search-condition----------+--------------------------------| '-| functional-dependency |-' functional-dependency |--+-column-name-----------+--DETERMINED BY--+-column-name-----------+--| | .-,-----------. | | .-,-----------. | | V | | | V | | '-(----column-name-+--)-' '-(----column-name-+--)-' typed-table-options |--+---------------------------+--+------------------------+----| +-HIERARCHY--hierarchy-name-+ '-| typed-element-list |-' '-| under-clause |----------' under-clause |--UNDER--supertable-name--INHERIT SELECT PRIVILEGES------------| typed-element-list .-,-----------------------------. V | |--(----+-| OID-column-definition |-+-+--)----------------------| +-| with-options |----------+ +-| unique-constraint |-----+ '-| check-constraint |------' OID-column-definition |--REF IS--OID-column-name--USER GENERATED----------------------| with-options |--column-name--WITH OPTIONS--| column-options |----------------| as-result-table |--+-----------------------+--AS--(--fullselect--)--------------> | .-,-----------. | | V | | '-(----column-name-+--)-' >--WITH NO DATA-------------------------------------------------| materialized-query-definition |--+-----------------------+--AS--(--fullselect--)--------------> | .-,-----------. | | V | | '-(----column-name-+--)-' >--| refreshable-table-options |--------------------------------| copy-options |--●--+-------------------------------------+--●----------------> | .-COLUMN-. | '-+-INCLUDING-+--+--------+--DEFAULTS-' '-EXCLUDING-' .-COLUMN ATTRIBUTES-. .-EXCLUDING IDENTITY--+-------------------+-. >--+-------------------------------------------+--●-------------| | .-COLUMN ATTRIBUTES-. | '-INCLUDING IDENTITY--+-------------------+-' refreshable-table-options |--DATA INITIALLY DEFERRED--REFRESH--+-DEFERRED--+--●-----------> '-IMMEDIATE-' .-ENABLE QUERY OPTIMIZATION--. >--+----------------------------+--●----------------------------> '-DISABLE QUERY OPTIMIZATION-' .-MAINTAINED BY SYSTEM--------------. >--+-----------------------------------+--●---------------------| '-MAINTAINED BY--+-USER-----------+-' '-FEDERATED_TOOL-' staging-table-definition |--+-------------------------------+--FOR--table-name2----------> | .-,-------------------. | | V | | '-(----staging-column-name-+--)-' >--PROPAGATE IMMEDIATE------------------------------------------| sequence-key-spec .-,-----------------------------------------------------------------------. V .-AT-. | |--(----column-name--+------------------------------+--ENDING--+----+--constant-+--)--> | .-FROM-. | '-STARTING--+------+--constant-' >--+-ALLOW OVERFLOW----+--+------------------+------------------| '-DISALLOW OVERFLOW-' '-PCTFREE--integer-' tablespace-clauses |--+---------------------------------------+--●-----------------> | .-,---------------. | | V | .-CYCLE----. | '-IN----tablespace-name-+--+----------+-' '-NO CYCLE-' >--+--------------------------------+---------------------------> | (14) | '-INDEX IN--tablespace-name------' >--+------------------------------+-----------------------------| | .-,---------------. | | V | | '-LONG IN----tablespace-name-+-' distribution-clause .-,-----------. .-HASH-. V | |--DISTRIBUTE BY--+-+------+--(----column-name-+--)-+-----------| '-REPLICATION---------------------' partitioning-clause .-RANGE-. |--PARTITION BY--+-------+--| range-partition-spec |------------| range-partition-spec .-,------------------------. V | |--(----| partition-expression |-+--)---------------------------> .-,---------------------. V | >--(----| partition-element |-+--)------------------------------| partition-expression .-NULLS LAST--. |--column-name--+-------------+---------------------------------| '-NULLS FIRST-' partition-element |--+-+---------------------------+--| boundary-spec |--| partition-tablespace-options |-+--| | '-PARTITION--partition-name-' | '-| boundary-spec |--EVERY--+-(--constant--+-------------------------+--)-+----------' | | (15) | | | '-| duration-label |------' | '-constant--+-------------------------+-------' | (15) | '-| duration-label |------' boundary-spec (16) |--+-| starting-clause |-------| ending-clause |-+--------------| '-| ending-clause |---------------------------' starting-clause .-,------------. .-FROM-. V | |--STARTING--+------+--+-(----+-constant-+-+--)-+---------------> | +-MINVALUE-+ | | '-MAXVALUE-' | '-+-constant-+-----------' +-MINVALUE-+ '-MAXVALUE-' .-INCLUSIVE-. >--+-----------+------------------------------------------------| '-EXCLUSIVE-' ending-clause .-,------------. .-AT-. V | .-INCLUSIVE-. |--ENDING--+----+--+-(----+-constant-+-+--)-+--+-----------+----| | +-MINVALUE-+ | '-EXCLUSIVE-' | '-MAXVALUE-' | '-+-constant-+-----------' +-MINVALUE-+ '-MAXVALUE-' partition-tablespace-options |--+---------------------+--+---------------------------+-------> '-IN--tablespace-name-' '-INDEX IN--tablespace-name-' >--+--------------------------+---------------------------------| '-LONG IN--tablespace-name-' duration-label |--+-YEAR---------+---------------------------------------------| +-YEARS--------+ +-MONTH--------+ +-MONTHS-------+ +-DAY----------+ +-DAYS---------+ +-HOUR---------+ +-HOURS--------+ +-MINUTE-------+ +-MINUTES------+ +-SECOND-------+ +-SECONDS------+ +-MICROSECOND--+ '-MICROSECONDS-'
システム保守のマテリアライズ照会表とユーザー保守のマテリアライズ照会表は、 それぞれを個別に識別する必要が生じない限り、 どちらもマテリアライズ照会表 と呼びます。
詳細については、行サイズの制限を参照してください。
精度と位取りが指定されない場合、デフォルト値の 5,0 が使用されます。 NUMERIC および NUM は、 DECIMAL および DEC の同義語として使用可能です。
精度を指定しない場合、デフォルト値 34 が使用されます。
integer K | M | G の意味は、BLOB の場合と同じです。
長さの指定がない場合、長さが 1,048,576 (1 メガバイト) であると想定されます。
CLOB 列の場合に、FOR BIT DATA 節を指定することはできません。 ただし、CLOB 列に CHAR FOR BIT DATA ストリングを割り当てることができ、 CLOB ストリングに CHAR FOR BIT DATA ストリングを連結することができます。
integer K | M | G の意味は、BLOB の場合に類似しています。 指定する数値が 2 バイト文字 1 個を 1 文字と数えた値であることと、最大サイズが 2 バイト文字 1,073,741,823 個であるという点が違います。
長さの指定がない場合、長さが 2 バイト文字 1,048,576 個であると想定されます。
integer K | M | G の意味は、BLOB の場合に類似しています。 指定する数値が 2 バイト文字 1 個を 1 文字と数えた値であることと、最大サイズが 2 バイト文字 1,073,741,823 個であるという点が違います。
長さの指定がない場合、長さが 1,048,576 (2 バイト文字) であると想定されます。
長さは、1 バイトから 2,147,483,647 バイトの範囲で指定できます。
integer (整数) だけを指定した場合は、それが最大長になります。
integer K (大文字または小文字) を指定した場合、最大長は integer の 1,024 倍になります。integer の最大値は 2,097,152 です。
integer M を指定した場合、 最大長は integer の 1,048,576 倍になります。integer の最大値は 2,048 です。
integer G を指定した場合、 最大長は integer の 1,073,741,824 倍になります。integer の最大値は 2 です。
計算結果が 2,147,483,648 を超える K、M、または G の倍数を指定すると、使用される実際の値は 2,147,483,647 (2 ギガバイト - 1 バイト) になります。これは LOB 列の最大長です。
長さの指定がない場合、長さが 1,048,576 (1 メガバイト) であると想定されます。
BLOB(50K) BLOB(50 K) BLOB (50 K)
タイプ XML の列を作成すると、その列に対する XML パス索引が作成されます。タイプ XML の最初の列を作成するときには、表レベルの XML 領域索引も作成されます。これらの索引の名前は、'SQL' の後に文字タイム・スタンプ (yymmddhhmmssxxx) を付けた形になります。スキーマ名は SYSIBM です。
特殊タイプを使用して列を定義する場合、 その列のデータ・タイプはその特殊タイプになります。 列の長さと位取りは、それぞれ特殊タイプのソース・タイプの長さと位取りになります。 指定した特殊タイプは、いかなるデータ・タイプ制約も持つことができません。また、ソース・タイプがアンカー・データ・タイプであってはなりません (SQLSTATE 428H2)。
特殊タイプを使用して定義された列が参照制約の外部キーである場合、 主キーの対応する列のデータ・タイプは、同じ特殊タイプでなければなりません。
構造化タイプを使用して列を定義する場合、 その列の静的データ・タイプはその構造化タイプになります。 その列には、 structured-type-name のサブタイプである動的タイプを持つ値を組み込むことができます。
構造化タイプを使用して定義された列を、主キー、ユニーク制約、外部キー、索引キー、 または分散キー内で使うことはできません (SQLSTATE 42962)。
列が、構造化タイプを使用して定義されていて、 ネストのいずれかのレベルで参照タイプ属性をもっている場合、 その参照タイプ属性の有効範囲は解除されます。 そのような属性を間接参照操作で使用するには、 CAST 指定を使って SCOPE を明示的に指定する必要があります。
NOT NULL を指定しない場合、列に NULL 値を含めることができます。 また、そのデフォルト値は、NULL 値 または WITH DEFAULT 節で指定される値のいずれかになります。
IMPLICITLY HIDDEN を表のすべての列に指定することはできません (SQLSTATE 428GU)。
NOT LOGGED は、コミットやロールバックの操作には影響しません。つまり、トランザクションがロールバックされても、LOB の値がログ記録されるか否かに関係なくデータベースの整合性は保持されます。ロギングされないので、ロールフォワード操作中、 バックアップまたはロード操作の後の LOB データは、 ロールフォワード操作中に、ログ・レコードがあれば再生されたはずの LOB 値をゼロで置換したものになります。 クラッシュ・リカバリーの過程で、コミットされた変更とロールバックされた変更すべてに、 予期された結果が反映されます。
間接参照演算子の左オペランド、または DEREF 関数の引数として使用する列には、 すべて有効範囲を指定する必要があります。 参照タイプ列の指定は、後続の ALTER TABLE ステートメントまで遅らせることができます。これにより、ターゲット表を定義できるようになります (通常は、 相互参照表の場合)。
この節が省略された場合は、表に定義されている既存の制約の ID の中でユニークな 18 バイトの長さの ID がシステムによって生成されます。 (ID は、"SQL" の後に続く、タイム・スタンプ機能に基づいて生成される一連の 15 の数字で構成されます。)
主キー制約またはユニーク制約とともに使用した場合、 この constraint-name は、 制約をサポートするために作成される索引の名前として使用されます。
表が副表である場合、主キーはスーパー表から継承されるので、 主キーを指定することはできません (SQLSTATE 429B3)。
ROW CHANGE TIMESTAMP 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。
行開始列、行終了列、およびトランザクション開始 ID 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。
unique-constraint の説明の中の PRIMARY KEY を参照してください。
表が副表である場合、ユニーク制約はスーパー表から継承されるので、ユニーク制約を指定することはできません (SQLSTATE 429B3)。
unique-constraint の説明の中の UNIQUE を参照してください。
referential-constraint の説明の references-clause を参照してください。
挿入で値が設定されなかった場合、あるいは INSERT または UPDATE で値が DEFAULT に指定されている場合に、デフォルト値を提供します。 DEFAULT キーワードの後にデフォルト値が指定されていない場合、 使用されるデフォルト値は列のデータ・タイプによって異なります。 『ALTER TABLE』を参照してください。 列定義で、この節を generated-clause とともに指定することはできません (SQLSTATE 42614)。
列を XML として定義する場合、デフォルト値は指定できません (SQLSTATE 42613)。可能なデフォルト値は NULL だけです。
列が型付き表の列に基づいている場合、 デフォルト値の定義時には特定のデフォルト値を指定する必要があります。 型付き表のオブジェクト ID の列には、 デフォルト値を指定することはできません (SQLSTATE 42997)。
列が特殊タイプを使用して定義される場合、列のデフォルト値は、 特殊タイプにキャストされたソース・データ・タイプのデフォルト値になります。
構造化タイプを使用して列を定義する場合は、 default-clause を指定できません (SQLSTATE 42842)。
column-definition から DEFAULT を省略すると、 その列のデフォルト値として NULL 値が使用されます。 そのような列を NOT NULL と定義すると、その列には有効なデフォルトはなくなります。
指定した値が無効な場合、エラーが戻されます (SQLSTATE 42894)。
DB2® が列の値を生成することを指定します。 その列が ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列であると見なされる場合、GENERATED を指定する必要があります。 GENERATED として定義された列にはデフォルト節を指定することはできません (SQLSTATE 42623)。
明示的には要求されませんが、値の固有性を確保するために、生成された ID 列には固有の 1 列の索引を定義してください。
ID 列は暗黙で NOT NULL になります。 ID 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。
この値が負の場合、これは降順シーケンスです。 この値が 0 の場合、または正の場合は、昇順シーケンスになります。デフォルトは 1 です。
CYCLE が有効な場合、DB2 が ID 列について重複する値を生成する可能性があります。固有値が望ましい場合、明示的には要求されませんが、値の固有性を確保するために、1 列のユニーク索引を生成列で定義する必要があります。 このような ID 列にユニーク索引が存在し、固有ではない値が生成されると、エラーが起こります (SQLSTATE 23505)。
このオプションが指定されると、ID 列の値はキャッシュに保管されません。 この場合、新しい ID 値が要求されるたびに、ログに対して同期入出力が行われます。
ID 列に新しい値が必要でも、使用可能な未使用の値がキャッシュにない場合、値を割り振るとログへの入出力を待機します。 ただし、ID 列に新しい値が必要で、未使用の値がキャッシュにあれば、 その ID 値の割り振りが、ログへの入出力なしで素早く行われます。
正常な理由またはシステム障害のためにデータベースが非アクティブになると、 コミットされたステートメントで使用されていないキャッシュ済みシーケンス値はすべて 失われます。つまり使用されなくなります。 データベースの活動解除が起きたら失われる可能性のある ID 列値の最大数は、 CACHE オプションに指定された値になります。 (データベースが ACTIVATE コマンドまたは API を使用して明示的にアクティブ化されない場合には、 最終アプリケーションの接続をデータベースから切断すると、暗黙の活動解除が行われます。)
最小値は 2 です (SQLSTATE 42815)。 デフォルト値は CACHE 20 です。
複数パーティション環境または DB2 pureScale® 環境で、複数の DB2 メンバーがシーケンス値を同時にキャッシュに入れられるようにするには、CACHE および NO ORDER オプションを使用します。
DB2 pureScale 環境では、CACHE と ORDER の両方が指定されている場合、ORDER の指定が CACHE の指定をオーバーライドして、NO CACHE が有効になります。
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)。
列のデータ・タイプは generation-expression の結果データ・タイプに基づいています。 CAST 指定を使って特定のデータ・タイプを強制的に使用し、 有効範囲を設けることができます (参照タイプの場合のみ)。 data-type を指定すると、適切な割り当て規則に従って、値が列に割り当てられます。 NOT NULL 列オプションを使わない限り、生成列は暗黙で NULL 可能と見なされます。 生成列のデータ・タイプと generation-expression の結果データ・タイプは、等価のものとして定義されている必要があります (『割り当てと比較』を参照してください)。ただし、LOB データ・タイプ、XML、構造化タイプ、およびこれらのいずれかのタイプに基づいた特殊タイプの列と生成式を除きます (SQLSTATE 42962)。
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって生成値が割り当てられます。 この値は、トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメント、またはシステム期間テンポラル表に含まれる行を削除するデータ変更ステートメントのいずれかを最初に実行している間に、時刻機構を読み取ることによって生成されます。
システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連した履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、タイム・スタンプ値が調整される可能性があります。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、データベース構成パラメーター systime_period_adj を Yes に設定する必要があります。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。列は DEFAULT 節を持つことができず (SQLSTATE 42623)、また列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行開始列は更新できません。
これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は 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)。行終了列は更新できません。
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または 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 列は更新できません。
データ・タイプ XML または LOB の列では、integer は、基本表の行に格納する XML 文書または LOB データの内部表記の最大バイト・サイズを指示します。これより大きな内部表記を持つ XML 文書は、基本表の行とは別に、補助ストレージ・オブジェクト内に格納されます。 これは自動的に行われます。 XML タイプの列には、デフォルト・インライン長はありません。 XML 文書または LOB データが基本表の行にインラインで保管される場合、追加のオーバーヘッドが生じます。LOB データの場合、オーバーヘッドは 4 バイトです。
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 |
明示的 INLINE LENGTH 値は、32 673 を超えてはなりません。構造化タイプまたは XML データ・タイプの場合、少なくとも 292 でなければなりません (SQLSTATE 54010)。
システム・デフォルト値がこのような方法で保管されると、 列に対する挿入や更新操作の際に余分な検査が行われるために、 若干パフォーマンスが低下します。
基本データ・タイプは、DATE、TIME、TIMESTAMP、XML、または構造化データ・タイプであってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。
システム期間を 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 という名前で定義します。 表に BUSINESS_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる BUSINESS_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-name および end-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)。
指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 列の保管時の長さについては、バイト・カウントを参照してください。キー長の制限については、『SQL の制限』を参照してください。 列の長さ属性がページ・サイズに対応する索引キー長制限値の範囲内に収まる場合でも、LOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプは、ユニーク・キーの一部として使用できません (SQLSTATE 54008)。
ユニーク・キーの列セットは、主キーまたは他のユニーク・キーの列セットと同じにすることはできません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891)
表が副表である場合、ユニーク制約はスーパー表から継承されるので、ユニーク制約を指定することはできません (SQLSTATE 429B3)。
カタログに記録されている表の記述には、ユニーク・キーとそのユニーク索引が含まれます。 順方向と逆方向のスキャンが可能な双方向のユニーク索引は、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。 索引の名前は、作成している表が属しているスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。
指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 列の保管時の長さについては、バイト・カウントを参照してください。キー長の制限については、『SQL の制限』を参照してください。 列の長さ属性がページ・サイズに対応する索引キー長制限値の範囲内に収まる場合でも、LOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプは、主キーの一部として使用できません (SQLSTATE 54008)。
主キーの列セットは、ユニーク・キーの列セットと同じであってはなりません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891)
1 つの表には、主キーを 1 つだけ定義することができます。
表が副表である場合、主キーはスーパー表から継承されるので、 主キーを指定することはできません (SQLSTATE 429B3)。
カタログに記録されている表の記述には、主キーとその主索引が含まれます。 順方向と逆方向のスキャンが可能な双方向のユニーク索引は、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。 索引の名前は、作成している表が属しているスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。
表に分散キーがある場合、 unique-constraint (ユニーク制約) の列は分散キー 列のスーパーセットである必要があります。 列の順序は重要ではありません。
T1 を、ステートメントの対象となる表であると想定します。 参照制約の外部キーは、指定された列で構成されます。 列名リストの各名前は、T1 の列を指定していなければならず、 同じ列を複数回指定することはできません。
指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 列の保管時の長さについては、バイト・カウントを参照してください。キー長の制限については、『SQL の制限』を参照してください。 LOB、XML、これらのタイプのうちのいずれかに基づく特殊タイプ、または構造化タイプの列を、外部キーの一部として使用することはできません (SQLSTATE 42962)。外部キーの列の数は、親キーの列の数と同じでなければならず、 対応する列のデータ・タイプは互換性があることが必要です (SQLSTATE 42830)。 2 つの列の記述は、それらの列が互換性のあるデータ・タイプ (両方の列が数字、 文字ストリング、GRAPHIC、日付 / 時間であるか、 または同じ特殊タイプ) であれば互換性があります。
参照制約の外部キー、親キー、および親表または親ニックネームが、 以前に指定した参照制約の外部キー、親キー、および親表または親ニックネームと同じである場合、 参照制約は重複しています。 重複した参照制約は無視され、警告が戻されます (SQLSTATE 01543)。
以下の説明では、T2 は指定した親表を示し、T1 は作成する (または変更する) 表を示します。 (T1 と T2 は同じ表である可能性もあります。)
列名のリストは、 主キーまたは T2 に存在するユニーク制約の列セットと一致している (順序は任意) 必要があります (SQLSTATE 42890)。 列名のリストの指定がない場合、T2 に主キーがある必要があります (SQLSTATE 42888)。 列名リストを省略すると、指定されているとおりの順序でその主キーの列が暗黙に指定されます。
FOREIGN KEY 節で指定される参照制約は、 T2 が親であり、T1 が従属であるリレーションシップを定義します。
SET NULL は、外部キーの列に NULL 可能な列がない限り指定してはなりません。 この節を省略すると、暗黙に ON DELETE NO ACTION が指定されます。
T1 が複数のパスで T2 に連結削除されている場合は、 重複する外部キー定義を使用して 2 つの SET NULL 規則を定義することはできません。 例えば、T1 (i1, i2, i3) という場合、 Rule1 に外部キー (i1, i2) を使用し、Rule2 に外部キー (i2, i3) を使用するということはできません。
T1 の任意の行が 2 つの異なる規則によって影響される場合、エラーとなり行は削除されません。
複数の表が関係し、 削除規則の 1 つが RESTRICT または SET NULL になっている循環によって表が自身を連結削除するような参照制約は定義できません (SQLSTATE 42915)。
複数のパスによって表が自身や他の表を連結削除する参照制約は、 以下の場合を除き、定義できます (SQLSTATE 42915)。
T1 の何らかの行が別の削除規則の影響を受ける場合、 結果は、これらの規則で指定されたすべてのアクションの影響を受けます。 すべてのアクションの影響は、T1 の AFTER トリガーと CHECK 制約からも認識されます。 例えば、上位の表へのある連結削除パスによって NULL 設定されるターゲットになっていて、 同じ上位の表への 2 番目の連結削除パスによって削除されるターゲットになっている行があるとします。 この場合、結果として行は削除されます。 この派生表では、AFTER DELETE トリガーはアクティブ化されますが、 AFTER UPDATE トリガーはアクティブ化されません。
親表または従属表が型付き表階層のメンバーである参照制約に対して、上記の規則を適用する場合、各階層内のすべて の表に対して適用されるすべての参照制約が考慮に入れられます。
NO ACTION と RESTRICT の差異については、『注』のセクションを参照してください。
column-definition の一部としてチェック制約を指定する場合、 その同じ列に対してのみ列参照を行うことができます。 表定義の一部として指定されたチェック制約には、 それ以前に CREATE TABLE ステートメントで定義されている列を指定する列参照を含めることができます。 チェック制約の矛盾、重複条件、または同等条件については検査されません。 したがって、矛盾したチェック制約や冗長なチェック制約が定義可能であるため、 実行時にエラーになる可能性があります。
search-condition として IS NOT NULL を指定することもできますが、列の NOT NULL 属性を使用することによって直接的に NULL 可能を指定することをお勧めします。例えば、salary が NULL に設定された場合に、 CHECK (salary + bonus > 30000) は受け入れられます。 これは、CHECK 制約は満たされるか未知かのどちらかでなければならず、 この場合 salary は未知であるためです。 一方、salary が NULL に設定される場合に、 CHECK (salary IS NOT NULL) は偽となり、制約違反と見なされます。
search-condition を伴うチェック制約は、 表に対して行の挿入または更新が行われる時点で適用されます。 表で定義されるチェック制約は、その表の副表すべてに自動的に適用されます。
挿入、更新、削除、整合性設定などの通常の操作中には、 データベース・マネージャーによって機能従属関係が課せられません。 機能従属関係は、照会の最適化のための照会再書き込みで使用される場合があります。 機能従属関係の整合性が維持されないと、間違った結果が戻される可能性があります。
UNDER が指定されていない場合には、 オブジェクト ID 列を指定する必要があります (OID-column-definition を参照)。 このオブジェクト ID 列は、その表の最初の列になります。 オブジェクト ID 列の後に、type-name1 の属性に基づく列が続きます。
表の列には、スーパー表のオブジェクト ID 列が含まれています。 この列のタイプは、REF(type-name1) に変更されており、 type-name1 の属性に基づく列が続きます (ここでいうタイプには、 スーパータイプの属性も含まれていることを念頭に置いてください)。 属性名は OID 列名と同じものにすることはできません (SQLSTATE 42711)。
表スペースやデータ・キャプチャーなど、その他の表オプションは、初期状態ではログに記録されません。また、分散キー・オプションは指定できません。 これらのオプションはスーパー表から継承されます (SQLSTATE 42613)。
タイプ定義 (CREATE TYPE) の一部としてオプションが既に指定されている場合には、 ここで指定されているオプションは CREATE TYPE のオプションをオーバーライドします。
copy-attributes 節に基づいて、列のデフォルトと ID 列属性を組み込んだり除外したりすることができます。 さらにこの暗黙的な定義には、指定した表、ビュー、 またはニックネームの他の属性は含まれません。 したがって、新しい表には、ユニーク制約、外部キー制約、トリガー、索引、ORGANIZE BY 指定、PARTITIONING KEY 指定はいずれもありません。 表は IN 節で暗黙的にまたは明示的に指定した表スペースの中に作成されます。 また、任意指定の他の節を指定した場合に限り、この表にその任意指定の節が含まれます。
表が LIKE 節内で定義されていて、その表に ROW CHANGE TIMESTAMP 列が含まれている場合、新規表の対応する列は ROW CHANGE TIMESTAMP 列のデータ・タイプのみを継承します。新規列は生成列とは見なされません。
table-name-1 において行レベルまたは列レベルのアクセス制御がアクティブになると、これは新しい表で継承されません。
LIKE table-name が指定され、 しかも table-name が基本表、作成済み一時表、または宣言済み一時表を示す場合、 INCLUDING COLUMN DEFAULTS がデフォルトになります。 LIKE table-name が指定され、しかも table-name がニックネームを示す場合、INCLUDING COLUMN DEFAULTS は無効で、列のデフォルトはコピーされません。
この節がデフォルトです。ただし、LIKE table-name が指定され、 かつ table-name が基本表、作成済み一時表、または宣言済み一時表を示す場合を除きます。
全選択の結果表に、無名列の重複列名がある場合には、 列名のリストを指定する必要があります (SQLSTATE 42908)。 無名列とは、定数、関数、式、またはセット演算から派生した列で、 選択リストの AS 節によって名前が指定されていない列を指します。
各選択リスト・エレメントには名前が必要です (式には AS 節を使用します)。 as-result-table は、表の属性を定義します。 結果列のデータ・タイプは、表の列に対して有効なデータ・タイプである必要があります。
fullselect に data-change-table-reference 節を組み込むことはできません (SQLSTATE 428FL)。
型付き表または型付きビューを参照しない有効な fullselect を指定することができます。
fullselect で指定した表で行レベルまたは列レベルのアクセス制御がアクティブになると、これは新しい表にはカスケードされません。
表の列は、fullselect の結果である列の定義に基づいて定義されます。 fullselect によって FROM 節の 1 つの表が参照される場合、 その表の列である選択リスト項目は、参照される表の列名、 データ・タイプ、そして NULL 可能特性を使って定義されます。
fullselect の結果表に、無名列の重複列名がある場合には、 列名のリストを指定する必要があります (SQLSTATE 42908)。 無名列とは、定数、関数、式、またはセット演算から派生した列で、 選択リストの AS 節によって名前が指定されていない列を指します。
各選択リスト・エレメントには名前が必要です (式には AS 節を使用します)。 materialized-query-definition は、マテリアライズ照会表の属性を定義します。 選択されたオプションは、後述するように全選択の内容も定義します。
全選択に data-change-table-reference 節を組み込むことはできません (SQLSTATE 428FL)。
全選択に GROUP BY 節が含まれるマテリアライズ照会表は、 全選択で参照される表からの要約されたデータです。 そのようなマテリアライズ照会表は、サマリー表 と呼ばれます。 サマリー表は、特殊化したタイプのマテリアライズ照会表です。
行レベルまたは列レベルのアクセス制御がアクティブになっている表に依存する表またはビューを fullselect で参照する場合、マテリアライズ照会表にデータを設定するときにそれらの行レベルまたは列レベルのアクセス制御は無視されます。マテリアライズ照会表は自動的に作成され、その行レベルのアクセス制御はアクティブになります。適切な権限を作成するか、 または SECADM 権限を持つユーザーがこのマテリアライズ照会表の行レベル・アクセス制御を非アクティブにしない限り、 エンド・ユーザーがこの表に直接アクセスを行っても内容は表示されません。 マテリアライズ照会表に対する行レベルまたは列レベルのアクセス制御は、DB2 SQL コンパイラーによるそのマテリアライズ照会表に対する内部ルーティングには影響を及ぼさない点に注意してください。
このオプションを指定すると、CREATE TABLE ステートメント中の SELECT 節に基本表への参照を含めることはできません (SQLSTATE 428EC)。
行レベルまたは列レベルのアクセス制御がアクティブになっている表に 依存する表またはビューを fullselect で参照する場合、ステージング表にデータを設定するときにそれらの行レベルまたは列レベルのアクセス制御は無視されます。ただし、ステージング表は自動的に作成され、その行レベルのアクセス制御はアクティブになります。 適切な権限を作成するか、 または SECADM 権限を持つユーザーがこのステージング表の行レベル・アクセス制御を非アクティブにしない限り、 エンド・ユーザーがこのステージング表に直接アクセスを行っても内容は表示されません。 ステージング表に対する行レベルおよび列レベルのアクセス制御は、ステージング表でキャプチャーした変更を関連マテリアライズ照会表にアプライする内部プロセスには影響を及ぼさない点に注意してください。
列名 | データ・タイプ | 列の説明 |
---|---|---|
GLOBALTRANSID | CHAR(8) FOR BIT DATA | 伝搬された各行のグローバル・トランザクション ID |
GLOBALTRANSTIME | CHAR(13) FOR BIT DATA | トランザクションのタイム・スタンプ |
OPERATIONTYPE | INTEGER | 伝搬された行に対する操作。 挿入、更新、または削除のいずれか。 |
関連付けられたマテリアライズ照会表の任意の列が、生成列名と重複する場合には、 列名のリストを指定する必要があります (SQLSTATE 42711)。
ステージング表の内容が、関連付けられたマテリアライズ照会表および基礎ソース表と整合する場合には、 REFRESH TABLE ステートメントを呼び出すことにより、ステージング表の内容を使用してマテリアライズ照会表をリフレッシュできます。
クラスタリング・ブロック索引はそれぞれ指定されたディメンション用に自動的に保持され、 節で使用されるすべての列で構成されるブロック索引は、 どのクラスタリング・ブロック索引にもすべての列が含まれていない場合には保持されます。 ORGANIZE BY 節で使用される列セットは、CLUSTER を指定する CREATE INDEX ステートメントの規則に従う必要があります。
ORGANIZE BY 節で指定された各列名は、表に対して定義されなければなりません (SQLSTATE 42703)。ディメンションはディメンション・リストに複数回含めることはできません (SQLSTATE 42709)。ディメンションに ROW CHANGE TIMESTAMP 列、行開始列、行終了列、トランザクション開始 ID 列を含めることはできません (SQLSTATE 429BV)。また、XML 列を含めることはできません (SQLSTATE 42962)。
表のページは、表スペースのエクステント・サイズと同じサイズのブロックに配置され、 各ブロックの行すべては同じディメンション値の組み合わせを含みます。
表がマルチディメンション・クラスタリング (MDC) 表であると同時にパーティション表でもあることは可能です。 そのような表の列は、range-partition-spec と MDC キーの両方で使用できます。 ただし、表パーティションは、マルチ列であり、マルチディメンションではありません。
DB2 バージョン 9.7 フィックスパック 1 以降のリリースで作成されるパーティション MDC 表の場合、ブロック索引はパーティション化されます。 パーティション・ブロック索引の配置は、パーティション索引のストレージ配置に関する一般規則に従います。 MDC ブロック索引を含め、ある特定のデータ・パーティションのすべての索引パーティションが、1 つの索引オブジェクトを共有します。 デフォルトでは、特定の各データ・パーティションの索引パーティションは、データ・パーティションと同じ表スペースに存在します。 これは、パーティション・レベルの INDEX IN 節を使用してオーバーライドできます。
DB2 V9.7 以前のリリースで作成された MDC 表の場合、ブロック索引は非パーティション索引であり、再作成されても非パーティション索引のままです。 パーティション・ブロック索引を持つ MDC 表は、非パーティション・ブロック索引を持つ MDC 表と同じデータベースに共存できます。 非パーティション・ブロック索引をパーティション・ブロック索引に変更するには、Online Table Move を使用して MDC 表をマイグレーションします。
列ごとに昇順で指定されたキー・シーケンスで、列のカタログにユニーク索引項目が自動的に作成されます。 索引の名前は、SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM が付いたものになります。 表の編成はこのキーによって配列されているため、実際の索引オブジェクトはストレージに作成されません。 同じ列に、範囲がクラスター化された表のシーケンス・キーとして主キーまたはユニークな制約が定義されている場合は、 この同じ索引項目が制約に使用されます。
キー・シーケンスの指定には、列の制約を反映するチェック制約が存在します。 DISALLOW OVERFLOW 節が指定されていると、 チェック制約の名前が RCT になり、チェック制約が施行されます。 ALLOW OVERFLOW 節が指定されていると、 チェック制約の名前が RCT_OFLOW になり、チェック制約は施行されません。
表が、範囲がクラスター化されたマテリアライズ照会表の場合、DISALLOW OVERFLOW 節は指定できません (SQLSTATE 429BG)。
データは、暗黙的に作成された仮想ディメンションを使用してクラスター化されます。 この仮想ディメンションのために、クラスタリング・ブロック索引が自動的に保守されます。 仮想ディメンションは、直接操作するこことはできません。また、表に存在する行ごとにスペースが消費されることはありません。 表のページは、同じサイズのブロック単位で配置されます。このサイズは、表スペースのエクステント・サイズに相当します。
表が型付き表の場合、ORGANIZE BY INSERT TIME 節は指定できません (SQLSTATE 428DH)。
この節が指定されず、当該の表が型付き表でない場合、デフォルトは、表が作成されるときのスキーマの DATA CAPTURE 設定によって定まります。
表が、副表ではない型付き表である場合、このオプションはサポートされません (SQLSTATE 428DH)。
表レベルでは、最大で 1 個の IN 節だけが認められています。 1 つの表が使用するすべてのデータ表スペースは、同じページ・サイズ、同じエクステント・サイズでなければなりません。
表スペースを 1 つだけ指定した場合、すべての表パーツはその表スペースに保管されます。 副表は表階層のルート表から表スペースを継承するので、副表の作成の際にこの節を指定することはできません (SQLSTATE 42613)。
この節が指定されない場合、データベース・マネージャーは、ステートメントの許可 ID が USE 特権を持っている、必要最小限のページ・サイズがある表スペースを (データベース内の既存の表スペースのセットから) 選択します。
パーティション表では、それぞれのデータ・パーティションを複数の表スペースに配分できます。 複数の表スペースを指定する場合、そのすべての表スペースは既存のものでなければならず、すべてが SMS 表スペースであるか、すべてが REGULAR DMS 表スペースであるか、すべてが LARGE DMS 表スペースであることが必要です (SQLSTATE 42838)。 ステートメントの許可 ID には、指定したすべての表スペースに対する USE 特権が必要です。
十分な表のページ・サイズは、行のバイト・カウントか列の数のいずれかによって決まります。 詳しくは、行サイズの制限を参照してください。
索引を組み込む表スペースの指定は、表の作成時に行うことができます。また、パーティション表の場合は、非パーティション索引の CREATE INDEX ステートメントの IN 節を指定することによって行うことも可能です。表スペースに対する USE 特権があるかどうかのチェックは、後に索引を作成する時ではなく表の作成時に行われます。
指定した表スペースは存在していなければなりません。 これは、データが保管されている同じ表スペースである場合、REGULAR 表スペースとすることもできます。そうでない場合は、ステートメントの許可 ID が USE 特権を保持する LARGE DMS 表スペースでなければなりません。 さらに、これは tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。
長形式、LOB、または XML の列を組み込む表スペースの指定は、表の作成時にのみ行えます。USE 特権があるかどうかのチェックは、長形式列または LOB 列を追加するときではなく表の作成時に行われます。
パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。
デフォルトの分散キーの要件を満たす列が存在しない場合は、分散キーなしで表が作成されます。 このような表は、単一パーティションのデータベース・パーティション・グループに対して定義された表スペースでのみ認められています。
単一パーティションのデータベース・パーティション・グループに対して定義された表スペースの表の場合は、分散キーとして有効なデータ・タイプの任意の列の集合を分散キーの定義に使用できます。 この節を指定しない場合は、分散キーが作成されません。
分散キーに関連した制約事項については、規則を参照してください。
範囲仕様に使用される数値リテラルには、数値リテラル用の規則が適用されます。 数値列に対応する範囲で使用されるすべての数値リテラル (10 進浮動小数点特殊値を除く) は、数値定数に指定された規則に従って、整数、浮動小数点数、または 10 進定数として解釈されます。 結果として 10 進浮動小数点数列では、データ・パーティションの範囲仕様に使用できる最小および最大の数値定数の値は、それぞれ、最小の DOUBLE 値および最大の DOUBLE 値になります。 10 進浮動小数点特殊値を範囲仕様で使用することができます。 すべての 10 進浮動小数点特殊値は、MINVALUE よりも大きく MAXVALUE よりも小さいものとして解釈されます。
表パーティション列に ROW CHANGE TIMESTAMP 列を含めることはできません (SQLSTATE 429BV )。指定する列の数が 16 を超えてはなりません (SQLSTATE 54008)。
CREATE TABLE ステートメントまたは CREATE INDEX ステートメントで INDEX IN 節を指定しない場合は、表の最初の可視パーティションまたはアタッチされたパーティションと同じ表スペースに索引が配置されます。
partition-element レベルの INDEX IN 節は、パーティション索引のストレージのみに影響します。索引のストレージは、次のようになります。
INDEX IN 節は、データ表スペースが DMS 表スペースで、INDEX IN 節で指定された表スペースが DMS 表スペースの場合にのみ指定できます。データ表スペースが SMS 表スペースの場合は、エラーが戻されます (SQLSTATE 42839)。
指定した表スペースは存在していなければなりません。 これは、データが保管されている同じ表スペースである場合、REGULAR 表スペースとすることもできます。そうでない場合は、ステートメントの許可 ID が USE 特権を保持する LARGE DMS 表スペースでなければなりません。 さらに、これは tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。
長形式、LOB、または XML の列を組み込む表スペースの指定は、表の作成時にのみ行えます。USE 特権があるかどうかのチェックは、長形式列または LOB 列を追加するときではなく表の作成時に行われます。
パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。
パーティション・キー列が数値タイプの場合、最初のパーティションの開始値は、starting-clause に指定されている値になります。 最初のパーティションと他のすべてのパーティションの終了値は、パーティションの開始値に、EVERY 節の constant として指定されている増分値を加算する形で計算されます。 他のすべてのパーティションの開始値は、直前のパーティションの開始値に、EVERY 節の constant として指定されている増分値を加算する形で計算されます。
パーティション・キー列が DATE または TIMESTAMP の場合、最初のパーティションの開始値は、starting-clause に指定されている値になります。 最初のパーティションと他のすべてのパーティションの終了値は、パーティションの開始値に、EVERY 節のラベル付き期間として指定されている増分値を加算する形で計算されます。 他のすべてのパーティションの開始値は、直前のパーティションの開始値に、EVERY 節のラベル付き期間として指定されている増分値を加算する形で計算されます。
数値列の場合、EVERY の値は正の数値定数でなければならず、日時列の場合、EVERY の値はラベル付き期間でなければなりません (SQLSTATE 53045)。
アダプティブ行圧縮の場合は、 ページ・レベルのコンプレッション・ディクショナリーが、データ挿入またはデータ変更が表に行われるとすぐに作成または更新されます。
NULL 値は 3 バイトを使用して保管されます。 これは、すべてのデータ・タイプの列に対して VALUE COMPRESSION がアクティブでない場合と同じスペース、またはそれより少ないスペースです (CHAR(1) は例外)。 列が NULL 可能として定義されているかいないかは、行サイズ計算には影響しません。 データ・タイプが VARCHAR、VARGRAPHIC、LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB、BLOB、XML である列の、長さがゼロのデータ値は、2 バイトだけ使用して保管されます。これは、VALUE COMPRESSION がアクティブでない場合に必要とされるストレージを下回ります。 COMPRESS SYSTEM DEFAULT オプションを使用して列を定義すると、列のシステム・デフォルト値も 合計 3 バイトのストレージを使用して保管できるようになります。 これをサポートする行形式は、各データ・タイプのバイト・カウントを決定し、NULL 値、長さがゼロの値、またはシステム・デフォルト値への更新、またはそれらの値からの更新を行う際に、データ・フラグメントの原因となる傾向があります。
カタログの変更と、ストレージに関連する情報は、 以後の作業単位で表に対して行われた操作と同様にすべてログ記録されます。
呼び出される SQL ステートメント内の表の CCSID に関係なく、 アプリケーション内のホスト変数は常にアプリケーションのコード・ページで表記されます。 DB2 は、アプリケーション・コード・ページとセクション・コード・ページ間での データ変換の必要に応じて、コード・ページ変換を実行します。 レジストリー変数 DB2CODEPAGE をクライアント側で設定して、 アプリケーション・コード・ページを変更することができます。
リモート・サーバー (CREATE SERVER ステートメントに指定されたサーバー名) は、OPTIONS 節に指定しなければなりません。 OPTIONS 節を使用して、 作成中のリモート基本表のスキーマまたは非修飾名をオーバーライドすることもできます。
スキーマ名を指定することが推奨されています。 リモート・スキーマ名が指定されていない場合、表名の修飾子が使用されます。 表名に修飾子がない場合、ステートメントの許可 ID が使用されます。
リモート基本表の非修飾名が指定されていない場合、 table-name が使用されます。
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 が RESTRICT の削除規則を伴う表 T3 の親である場合に、T3 に T1 の親キーの子行があると、 制約違反 (SQLSTATE 23001) になります。
表 T1 が表 T3 の親で、T3 の削除規則が NO ACTION である場合、 T1 からの削除に対して NO ACTION 削除規則が適用される前に T2 から行を削除すると、 削除規則 CASCADE によって、その子行が削除される場合があります。 T2 からの削除で、T3 内の T1 の親キーの子行に削除されなかったものがあると、制約違反 (SQLSTATE 23504) になります。
戻される SQLSTATE は、 削除規則または更新規則が RESTRICT か NO ACTION かによって異なります。
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
アプリケーション期間のテンポラル表に対してデータ変更操作を行うと、行が更新または削除されるときに、1、2 行の追加行が自動的に挿入される場合があります。 アプリケーション期間のテンポラル表のある行で示される期間の一部分に対して行の更新または削除を指定すると、その行は更新または削除され、その行の変更されない部分を示す行が 1、2 行が自動的に挿入されます。 表に対する更新操作または削除操作の結果として自動的に挿入される行ごとに、アプリケーション期間のテンポラル表に対して生成される各列に新規の値が生成されます。 生成される列がユニーク・キー、主キー、参照制約の親キー、またはユニーク索引の一部として定義される場合、自動挿入によって制約または索引に違反する可能性があり、その場合にはエラーが返されます。
データ移動ユーティリティーでは、暗黙的な非表示列が含まれる表を作業対象とする場合、DB2_DMU_DEFAULT レジストリー変数、implicitlyhiddeninclude ファイル・タイプ修飾子、implicitlyhiddenmissing ファイル・タイプ修飾子のいずれかを使用しなければなりません。
リモート基本表が透過 DDL を使用して作成された場合、 そのリモート基本表に対してニックネームが自動的に作成されます。
ページ・サイズ | 行サイズの制限 | 列数の制限 |
---|---|---|
4K | 4,005 | 500 |
8K | 8,101 | 1,012 |
16K | 16,293 | 1,012 |
32K | 32,677 | 1,012 |
Total Columns * 8 + Number of LOB Columns * 12 <=
Row Size Limit for Page Size
表が構造化タイプに基づいている場合には、副表が定義されているか否かにかかわらず、 副表の行を識別するために 4 バイトのオーバーヘッドが確保されます。 さらに、追加される副表列は、NULL 不可と定義されている場合でも、 バイト・カウントのために必ず NULL 可能として考慮されます。
データ・タイプ | 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 |
GRAPHIC(n) | n*2+2 | n*2+1 | n*2 |
VARGRAPHIC(n) | n*2+2 | n*2+5 (表内) | n*2+4 (表内) |
LONG VARGRAPHIC2 | 22 | 25 | 24 |
DATE | 6 | 5 | 4 |
TIME | 5 | 4 | 3 |
TIMESTAMP(p) | (p+1)/2+9 の整数部分 (p は秒未満の精度) | (p+1)/2+8 の整数部分 (p は秒未満の精度) | (p+1)/2+7 の整数部分 (p は秒未満の精度) |
XML (INLINE LENGTH が指定されない場合) | 82 | 85 | 84 |
XML (INLINE LENGTH が指定される場合) | INLINE LENGTH +2 | INLINE LENGTH +4 | INLINE LENGTH +3 |
LOB3 の最大長 1,024 (INLINE LENGTH が指定されない場合) | 70 | 73 | 72 |
LOB の最大長 8,192 (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 バイトの追加ストレージがあります。 2 データ・タイプ LONG VARCHAR と LONG VARGRAPHIC は、サポートされていますが、非推奨になっており、将来のリリースで除去される可能性があります。 3 各 LOB 値は、その基底レコードに、実際の値の位置へのポインターとなる LOB 記述子 を持っています。その記述子のサイズは、列に定義されている最大長によって異なります。 LOB 列で INLINE LENGTH が指定されていない場合、記述子のサイズがデフォルトの INLINE LENGTH 値として使用されます。 LOB 列のバイト数を判別する場合、LOB 列がシステム一時表の一部となるときに追加のバイトが考慮されます。それらは、インセンシティブ・カーソル、スクロール可能カーソル、および一時スペースやデータのソートが必要となる他の照会のために生成される場合があります。 必要な追加バイト数は、照会によって異なり、最大で 70 バイトになることがあります。 基本表がページ・サイズの行の最大長に近づくと、システム一時表が使用可能な最大のシステム一時表スペースに収まらない場合には照会の処理時にエラーが戻されることがあります。 特殊タイプ の場合、 バイト・カウントは特殊タイプのソース・タイプの長さに相当します。 参照タイプ の場合には、 バイト・カウントは、参照タイプの基礎となる組み込みデータ・タイプの長さに相当します。構造化タイプ では、バイト・カウントは INLINE LENGTH + 4 に相当します。INLINE LENGTH は、column-options 節の列に指定された (または暗黙で計算された) 値です。 |
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)
最初の表に、属性のセットの定義を示しています。2 番目の表では、これらの属性を参照して、各データ・タイプのバイト・カウントの詳細を示しています。
バイト・カウントは VALUE COMPRESSION がアクティブかどうかによって異なります。 VALUE COMPRESSION がアクティブでない場合には、バイト・カウントは列が NULL 可能であるかどうかによっても異なります。表の値は、値を保管するために使用されるストレージ量 (バイト単位) を表します。 表示される バイト・カウントは、行圧縮が有効になっていない場合のバイト・カウントです。行圧縮がアクティブな場合、行に使用されている合計バイト数は、通常、非圧縮バージョンの行の合計バイト数より小さくなり、大きくなることはありません。
ケース | データ値 | VALUE COMPRESSION | 列の NULL 可能性 |
---|---|---|---|
A | NULL | アクティブでない | NULL 可能 |
B | NULL | アクティブ 2 | NULL 可能 |
C | 長さゼロ | アクティブ 2 | 該当なし |
D | システム・デフォルト1 | アクティブ 2 | 該当なし |
E | 他のすべてのデータ値 | アクティブでない | NULL 可能 |
F | 他のすべてのデータ値 | アクティブでない | NULL 可能でない |
G | 他のすべてのデータ値 | アクティブ 2 | 該当なし |
1 列に対して COMPRESS SYSTEM DEFAULT が指定される場合。 2 その行の VALUE COMPRESSION がアクティブの場合には、行ごとに使用される 2 バイトの追加ストレージがあります。 |
データ・タイプ | ケース 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 |
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 はデータ内のバイト数) |
LONG VARGRAPHIC2 | 5 | 3 | 2 | 2 | 25 | 24 | 22 |
DATE | 5 | 3 | - | - | 5 | 4 | 6 |
TIME | 4 | 3 | - | - | 4 | 3 | 5 |
TIMESTAMP(p) | (p+1)/2+8 の整数部分 (p は秒未満の精度) | 3 | - | - | (p+1)/2+8 の整数部分 (p は秒未満の精度) | (p+1)/2+7 の整数部分 (p は秒未満の精度) | (p+1)/2+9 の整数部分 (p は秒未満の精度) |
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 が指定される場合。 2 データ・タイプ LONG VARCHAR と LONG VARGRAPHIC は、サポートされていますが、非推奨になっており、将来のリリースで除去される可能性があります。 |
非単調な式を持つ、または単調化を識別できない、生成列に関係するディメンションを作成できますが、 スライスの範囲照会やこうしたディメンションのセル境界はサポートされません。 同等性および IN 述部は、スライスまたはセルによって処理できます。
生成された関数 fn に関係して以下の事柄が真の場合には、生成列は単調です。
SALARY - 10000
-SALARY
SALARY/1000
-SALARY/1000
式 "PRICE*DISCOUNT" は単調ではありません。 表の複数の列が関係するからです。
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
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
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)
CREATE TYPE JOHNDOE.T_SALARY AS INTEGER WITH COMPARISONS
CREATE TYPE JOHNDOE.MILES AS FLOAT WITH COMPARISONS
CREATE TABLE EMPLOYEE
(ID INTEGER NOT NULL,
NAME CHAR (30),
SALARY T_SALARY NOT NULL WITH DEFAULT,
LIVING_DIST MILES DEFAULT MILES(1) )
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)
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
CREATE TABLE EMPLOYEE .....
IN PAYROLL
CREATE TABLE SALARY.....
IN ACCOUNTING INDEX IN ACCOUNT_IDX
CREATE TABLE SALARY1 .....
または
CREATE TABLE SALARY1 .....
DATA CAPTURE NONE
CREATE TABLE SALARY2 .....
DATA CAPTURE CHANGES
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 という名前のユニーク索引が同じスキーマ内に自動的に作成されます。 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) )
CREATE TABLE EXCEPTION_EMPLOYEE AS
(SELECT EMPLOYEE.*,
CURRENT TIMESTAMP AS TIMESTAMP,
CAST ('' AS CLOB(32K)) AS MSG
FROM EMPLOYEE
) WITH NO DATA
TBSPACE PAGESIZE USER USERAUTH
------------------ ----------- ------ --------
DEPT4K 4096 BOBBY Y
PUBLIC4K 4096 PUBLIC Y
DEPT8K 8192 BOBBY Y
DEPT8K 8192 RICK Y
PUBLIC8K 8192 PUBLIC Y
CREATE TABLE DOCUMENTS
(SUMMARY VARCHAR(1000),
REPORT VARCHAR(2000))
CREATE TABLE CURRICULUM
(SUMMARY VARCHAR(1000),
REPORT VARCHAR(2000),
EXERCISES VARCHAR(1500))
CREATE TABLE PROJECTS (PID INTEGER,
LEAD EMP INLINE LENGTH 300,
STARTDATE DATE,
...)
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))
CREATE TABLE SALES
(CUSTOMER VARCHAR(80),
REGION CHAR(5),
YEAR INTEGER)
DISTRIBUTE BY HASH (YEAR)
ORGANIZE BY DIMENSIONS (REGION, YEAR)
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)
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)
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 が大文字に暗黙的に変換されることを示すために使用されています。
CREATE TABLE employee
(EMP_NO CHAR(6) NOT NULL,
...)
OPTIONS
(REMOTE_SERVER 'INFX_SERVER')
REMOTE_TABNAME オプションが指定されておらず、
かつ table-name が引用符で区切られていない場合、
通常リモート・データ・ソースでは名前が小文字で保管されるとしても、リモート基本表名は大文字になります。 CREATE TABLE employee
(EMP_NO CHAR(6) NOT NULL,
...)
OPTIONS
(REMOTE_SERVER 'INFX_SERVER',
REMOTE_TABNAME 'employee')
区切り ID をサポートするリモート・データ・ソースで表を作成するときには、
REMOTE_TABNAME オプションと、大文字小文字のいずれかで表名を指定した文字ストリング定数を使用します。 CREATE TABLE "employee"
(EMP_NO CHAR(6) NOT NULL,
...)
OPTIONS
(REMOTE_SERVER 'INFX_SERVER')
REMOTE_TABNAME オプションが指定されておらず、かつ table-name が引用符で区切られている場合、
リモート基本表名は table-name と同一になります。 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 になります。 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)
CREATE TABLE TOASTMASTERS
(PERFORMANCE DB2SECURITYLABEL,
POINTS INTEGER,
NAME VARCHAR(50))
SECURITY POLICY CONTRIBUTIONS
CREATE TABLE TOASTMASTERS
(PERFORMANCE CHAR(8),
POINTS INTEGER COLUMN SECURED WITH CLUBPOSITION,
NAME VARCHAR(50))
SECURITY POLICY CONTRIBUTIONS
CREATE TABLE TOASTMASTERS
(PERFORMANCE DB2SECURITYLABEL,
POINTS INTEGER COLUMN SECURED WITH CLUBPOSITION,
NAME VARCHAR(50))
SECURITY POLICY CONTRIBUTIONS
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)
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) は、最後のデータ・パーティションの範囲内に収まります。 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)
CREATE TABLE MYDOCS
(ID INTEGER,
DOC XML)
IN HLTBSPACE
CREATE TABLE NOTES
(ID INTEGER,
DESCRIPTION VARCHAR(255),
CREATED TIMESTAMP,
NOTE XML)
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) )
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)
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)
CREATE TABLE BOOKS
(ISBN_NUM INTEGER,
TITLE VARCHAR(255),
AUTHOR VARCHAR(255),
DATE_ADDED TIMESTAMP WITH DEFAULT CURRENT TIMESTAMP)
CREATE TABLE STUDENTS (
STUDENTID INT NOT NULL,
FAMILY_NAME VARCHAR(36) NOT NULL,
GIVEN_NAME VARCHAR(36) NOT NULL,
PRIMARY KEY(STUDENTID))
CCSID UNICODE
CREATE TABLE TDEPT_TEMP LIKE TDEPT
TDEPT_TEMP 表の定義は、主キーが定義されないことと、デフォルトの表スペースが暗黙的に選択されることを除き、TDEPT のものと同じになります。 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 のラベル・ベースのアクセス制御プロパティーは次のとおりです。 CREATE TABLE st1 FOR m1 PROPAGATE IMMEDIATE
ステージング表 st1 のラベル・ベースのアクセス制御プロパティーは次のとおりです。