DECLARE GLOBAL TEMPORARY TABLE
DECLARE GLOBAL TEMPORARY TABLE ステートメントは、現行アプリケーション ・プロセス用の宣言済み一時表を定義します。 宣言済み一時表記述は、システム・カタログには含まれません。 この記述は持続性のあるものではなく、複数のアプリケーション・プロセス間で共用する ことはできません。 同名の宣言済み一時表を定義するアプリケーション・プロセスは、それぞれ固有の一時表の記述を使用します。アプリケーション・プロセスが終了すると、一時表は除去されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。
権限
LIKE または AS 選択ステートメント 文節を指定する場合は、このステートメントの権限 ID が保持する特権には、その LIKE 文節または as-result-table 文節で指定するすべての表またはビューに対して、少なくとも次の 1 つが含まれていなければなりません。
- 表またはビューに対する SELECT 特権
- 表またはビューの所有権
- データベース管理者権限
特殊タイプを参照する場合は、ステートメントの権限 ID によって保持される 特権に、少なくとも次のいずれか 1 つが含まれなければなりません。
- ステートメント内で識別された、それぞれの特殊タイプごとに、
- その特殊タイプに対する USAGE 特権、および
- その特殊タイプを含むライブラリーに対する *EXECUTE システム権限
- データベース管理者権限
SQL 特権に対応するシステム権限については、『表またはビューへの権限を検査する際の対応するシステム権限』および 『特殊タイプへの権限を検査する際の対応するシステム権限』を参照してください。
構文
>>-DECLARE GLOBAL TEMPORARY TABLE--table-name--+-------------------------------------------+--> '-FOR SYSTEM NAME--system-object-identifier-' .-,------------------------------------------. V | >--+-(----+-column-definition----------------------+-+--)-+-----> | +-period-definition----------------------+ | | '-LIKE--+-table-name-+--+--------------+-' | | '-view-name--' '-copy-options-' | +-LIKE--+-table-name-+--+--------------+---------------+ | '-view-name--' '-copy-options-' | '-as-result-table--------------------------------------' .-----------------------------------------------. V | (1) >----+-WITH REPLACE------------------------------+-+------------> | .-ON COMMIT DELETE ROWS---. | +-+-------------------------+---------------+ | '-ON COMMIT PRESERVE ROWS-' | | .-ON ROLLBACK DELETE ROWS---. | '-NOT LOGGED--+---------------------------+-' '-ON ROLLBACK PRESERVE ROWS-' (2) >--+---------------------+------+------------------+------------> '-RCDFMT--format-name-' '-media-preference-' >--+-------------------+--------------------------------------->< '-memory-preference-' media-preference .-UNIT ANY-. |--+-UNIT SSD-+-------------------------------------------------| memory-preference |--KEEP IN MEMORY--+-NO--+--------------------------------------| '-YES-' column-definition |--column-name--+-------------------------------------+---------> | .-COLUMN-. | '-FOR--+--------+--system-column-name-' (3) >--data-type----------------------------------------------------> .------------------------------------------------------------------. V | (1) >----+--------------------------------------------------------------+-+------| +-+-default-clause-------------------------------------------+-+ | +-generated-clause-----------------------------------------+ | | +-FIELDPROC--external-program-name--+--------------------+-+ | | | | .-,--------. | | | | | | V | | | | | | '-(----constant-+--)-' | | | +-NOT NULL-------------------------------------------------+ | | | .-NOT HIDDEN--------. | | | '-+-------------------+------------------------------------' | | '-IMPLICITLY HIDDEN-' | | (4) | '-datalink-options---------------------------------------------' data-type |--+-built-in-type------+---------------------------------------| '-distinct-type-name-'
- 同じ文節を複数回指定することはできません。
- オプション文節は、どのような順序で指定しても構いません。
- data-type は、行変更タイム・スタンプ列、行開始列、行終了列、およびトランザクション開始 ID 列にはオプションです。
- データ・リンク・オプションは、DATALINK、および DATALINK をソ ースとする特殊タイプに対してのみ指定することができます。
built-in-type |--+-+---SMALLINT---+----------------------------------------------------------------------------------------------------------+--| | +-+-INTEGER-+--+ | | | '-INT-----' | | | '---BIGINT-----' | | .-(5,0)------------------------. | +-+-+-DECIMAL-+-+--+------------------------------+-------------------------------------------------------------------------+ | | '-DEC-----' | | .-,0--------. | | | '-+-NUMERIC-+-' '-(--integer--+-----------+--)-' | | '-NUM-----' '-, integer-' | | .-(--52--)------. | +-+-FLOAT--+---------------+-+----------------------------------------------------------------------------------------------+ | | '-(--integer--)-' | | | +-REAL---------------------+ | | | .-PRECISION-. | | | '-DOUBLE--+-----------+----' | | .-(--34--)-. | +---DECFLOAT--+----------+--------------------------------------------------------------------------------------------------+ | '-(--16--)-' | | .-(--1--)-------. | +-+-+-+-CHARACTER-+--+---------------+-------------------------------+--+----------------+---------------------+------------+ | | | '-CHAR------' '-(--integer--)-' | +-FOR BIT DATA---+ | | | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)--+-----------------+-' +-FOR SBCS DATA--+ | | | | | '-CHAR------' | '-allocate-clause-' +-FOR MIXED DATA-+ | | | | '-VARCHAR----------------' '-ccsid-clause---' | | | | .-(--1M--)-------------. | | | '-----+-+-CHARACTER-+--LARGE OBJECT-+------+----------------------+--+-----------------+--+----------------+-' | | | '-CHAR------' | '-(--integer--+---+--)-' '-allocate-clause-' +-FOR SBCS DATA--+ | | '-CLOB------------------------' +-K-+ +-FOR MIXED DATA-+ | | +-M-+ '-ccsid-clause---' | | '-G-' | | .-(--1--)-------. | +-+---GRAPHIC----+---------------+----------------------------+--+--------------+-------------------------------------------+ | | '-(--integer--)-' | '-ccsid-clause-' | | +-+-GRAPHIC VARYING-+--(--integer--)--+-----------------+---+ | | | '-VARGRAPHIC------' '-allocate-clause-' | | | | .-(--1M--)-------------. | | | '---DBCLOB----+----------------------+--+-----------------+-' | | '-(--integer--+---+--)-' '-allocate-clause-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | +-+-+-+-NATIONAL CHARACTER-+--+---------------+-------------------------------+---------------------+--+------------------+-+ | | | +-NATIONAL CHAR------+ '-(--integer--)-' | | '-normalize-clause-' | | | | '-NCHAR--------------' | | | | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)--+-----------------+-' | | | | | +-NATIONAL CHAR------+ | '-allocate-clause-' | | | | | '-NCHAR--------------' | | | | | '-NVARCHAR------------------------' | | | | .-(--1M--)-------------. | | | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+--+-----------------+-' | | | '-NCHAR--------------' | '-(--integer--+---+--)-' '-allocate-clause-' | | '-NCLOB--------------------------------' +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | +-+-+-BINARY--+---------------+------------------------------+-----------------+--------------------------------------------+ | | | '-(--integer--)-' | | | | | '-+-BINARY VARYING-+--(--integer--)--+-----------------+-' | | | | '-VARBINARY------' '-allocate-clause-' | | | | .-(--1M--)-------------. | | | '---+-BLOB----------------+----+----------------------+--+-----------------+-' | | '-BINARY LARGE OBJECT-' '-(--integer--+---+--)-' '-allocate-clause-' | | +-K-+ | | +-M-+ | | '-G-' | +-+-DATE-------------------------+------------------------------------------------------------------------------------------+ | | .-(--0--)-. | | | +-TIME--+---------+------------+ | | | .-(--6--)-------. | | | '-TIMESTAMP--+---------------+-' | | '-(--integer--)-' | | .-(--200--)-----. | +---DATALINK--+---------------+--+-----------------+--+--------------+------------------------------------------------------+ | '-(--integer--)-' '-allocate-clause-' '-ccsid-clause-' | '---XML--+--------------+---------------------------------------------------------------------------------------------------' '-ccsid-clause-' ccsid-clause |--CCSID--integer--+------------------+-------------------------| '-normalize-clause-' normalize-clause .-NOT NORMALIZED-. |--+-NORMALIZED-----+-------------------------------------------| allocate-clause |--ALLOCATE--(integer)------------------------------------------|
default-clause .-WITH-. |--+------+--DEFAULT--+--------------------------------------------------------------------+--| +-constant-----------------------------------------------------------+ +-USER---------------------------------------------------------------+ +-NULL---------------------------------------------------------------+ +-CURRENT_DATE-------------------------------------------------------+ +-CURRENT_TIME-------------------------------------------------------+ | .-(--6--)-------. | +-CURRENT_TIMESTAMP--+---------------+-------------------------------+ | '-(--integer--)-' | '-cast-function-name--(--+-constant-----------------------------+--)-' +-USER---------------------------------+ +-CURRENT_DATE-------------------------+ +-CURRENT_TIME-------------------------+ | .-(--6--)-------. | '-CURRENT_TIMESTAMP--+---------------+-' '-(--integer--)-' generated-clause .-ALWAYS-----. (1) |--+-GENERATED--+------------+------+--------------------------------+-+--| | '-BY DEFAULT-' +-identity-options---------------+ | | '-as-row-change-timestamp-clause-' | | .-ALWAYS-. | '-GENERATED--+--------+--+-as-row-transaction-timestamp-clause-+----' +-as-row-transaction-start-id-clause--+ '-as-generated-expression-clause------'
- GENERATED を指定できるのは、列のデータ・タイプが ROWID (また は ROWID データ・タイプに基づく特殊タイプ) であるか、列が ID 列であるか、または列が行変更タイム・スタンプである場合のみです。
identity-options |--AS IDENTITY--+------------------------------------------------------+--| | .--------------------------------------------. | | V .-1----------------. (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-' | | .-NO ORDER-. | '-+-ORDER----+-----------------------'
- 同じ文節を複数回指定することはできません。
as-row-change-timestamp-clause |--FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP---------------| as-row-transaction-timestamp-clause |--AS ROW--+-+-BEGIN-+-+----------------------------------------| | '-START-' | '-END-------' as-row-transaction-start-id-clause |--AS TRANSACTION START ID--------------------------------------| as-generated-expression-clause |--AS--(--non-deterministic-expression--)-----------------------| non-deterministic-expression |--+-DATA CHANGE OPERATION----+---------------------------------| +-special-register---------+ '-built-in-global-variable-'
special-register |--+-CURRENT CLIENT_ACCTNG-----+--------------------------------| +-CURRENT CLIENT_APPLNAME---+ +-CURRENT CLIENT_PROGRAMID--+ +-CURRENT CLIENT_USERID-----+ +-CURRENT CLIENT_WRKSTNNAME-+ +-CURRENT SERVER------------+ '-+-SESSION_USER-+----------' '-USER---------' built-in-global-variable |--+-QSYS2.JOB_NAME---------------+-----------------------------| +-QSYS2.SERVER_MODE_JOB_NAME---+ +-SYSIBM.CLIENT_HOST-----------+ +-SYSIBM.CLIENT_IPADDR---------+ +-SYSIBM.CLIENT_PORT-----------+ +-SYSIBM.PACKAGE_NAME----------+ +-SYSIBM.PACKAGE_SCHEMA--------+ +-SYSIBM.PACKAGE_VERSION-------+ +-SYSIBM.ROUTINE_SCHEMA--------+ +-SYSIBM.ROUTINE_SPECIFIC_NAME-+ '-SYSIBM.ROUTINE_TYPE----------' period-definition .-FOR-. |--PERIOD--+-----+--SYSTEM_TIME--(--begin-column-name--,--end-column-name--)--| datalink-options .-LINKTYPE URL-. .-NO LINK CONTROL-. |--+--------------+--+-----------------+------------------------| copy-options .---------------------------------------------------------------. | .-COLUMN ATTRIBUTES-. | | .-EXCLUDING IDENTITY--+-------------------+-. | V | .-COLUMN ATTRIBUTES-. | | (1) |----+-+-INCLUDING IDENTITY--+-------------------+-+-------------+-+------| | .-COLUMN-. | | .-EXCLUDING--+--------+--DEFAULTS-. | | | .-COLUMN-. | | +-+-INCLUDING--+--------+--DEFAULTS-+-----------------------+ | '-USING TYPE DEFAULTS-------------' | | .-COLUMN ATTRIBUTES-. | | .-EXCLUDING IMPLICITLY HIDDEN -+-------------------+-. | | | .-COLUMN ATTRIBUTES-. | | +-+-INCLUDING IMPLICITLY HIDDEN -+-------------------+-+----+ | .-COLUMN ATTRIBUTES-. | | .-EXCLUDING ROW CHANGE TIMESTAMP -+-------------------+-. | | | .-COLUMN ATTRIBUTES-. | | '-+-INCLUDING ROW CHANGE TIMESTAMP -+-------------------+-+-' as-result-table |--+----------------------------------------------------------------+--> | .------------------------------------------------------. | | V | | '-(----column-name--+-------------------------------------+-+--)-' | .-COLUMN-. | '-FOR--+--------+--system-column-name-' >--AS--(--select-statement--)--+-WITH NO DATA-+--+--------------+--| '-WITH DATA----' '-copy-options-'
- 文節は、どのような順序で指定しても構いません。
説明
- table-name
- 一時表の名前を指定します。
修飾子を明示指定する場合は、SESSION でなければなりません。そうでない場合、エラーが戻されます。
指定しなかった場合は、修飾子は暗黙的に SESSION に設定されます。
宣言した一時表、または宣言した一時表に従属した索引またはビューが同じ名前で既に存在する場合、エラーが戻されます。
同名およびスキーマ名 SESSION を持つ表、ビュー、索引、または 別名が既に存在している場合は、以下のアクションがとられます。
- 宣言した一時表は、SESSION.table-name の名前で定義されます。 宣言済み一時表の解決には永続ライブラリーは含まれないので、エラーは起こりません。
- SESSION.table-name に対する参照は、SESSION.table-name の名前 を持つ永続的な表、ビュー、索引、または別名ではなく、この宣言済み一時表に解決されます。
この表は QTEMP ライブラリー内に作成されます。
- FOR SYSTEM NAME system-object-identifier
- 表のシステム・オブジェクト ID を示します。システム・オブジェクト ID は、現行サーバーに
既に存在する表、ビュー、別名、または索引と同一であってはなりません。
システム・オブジェクト ID は、非修飾システム
ID でなければなりません。
システム・オブジェクト ID が 指定される場合、表名 は有効なシステム・オブジェクト名であってはなりません。
column-definition
列の属性を定義します。少なくとも 1 つ以上で、8000 を超えない列の定義がなければなりません。
列の行バッファー・バイト・カウントの合計は、32766 (VARCHAR 列、VARGRAPHIC 列、または VARBINARY 列が指定されている場合は 32740) 以下でなければなりません。さらに、LOB 列または XML 列を指定してある場合は、すべての列の行データ・バイト・カウントの合計が 3.5 GB を超えていてはなりません。データ・タイプごとの列のバイト・カウントについて は、最大行サイズを参照してください。
- column-name
- 表を構成する列の名前を指定します。 列名 は修飾できません。表の複数の列や表のシステム列名に同じ名前を使用することもできません。
- FOR COLUMN system-column-name
- 列の IBM® i 名を指定します。表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。
システム列名が指定されず、また列名が有効なシステム列名でない場合には、システム列名が生成されます。 システム列名の生成方法に関する詳細については、列名の生成の規則を参照してください。
- data-type
- 列のデータ・タイプを指定します。
- built-in-type
- 組み込みデータ・タイプを指定します。
組み込みタイプ の説明については、CREATE TABLEを参照してください。
宣言済み一時表については、ROWID 列、または FILE LINK CONTROL を伴う DATALINK 列は指定できません。
- distinct-type-name
- 列のデータ・タイプが、特殊タイプ (ユーザー定義のデータ・タイプ) であることを指定します。 この列の長さ、精度、および位取りは、それぞれ、特殊タイプのソース となっているタイプの長さ、精度、および位取りと同じになります。 スキーマ名なしの特殊タイプを指定すると、その特殊 タイプ名は、SQL パス上のスキーマを検索することで解決されます。
- DEFAULT
- 列のデフォルト値を指定します。この文節は、1 つの列定義 の中で複数回指定することはできません。次のタイプの列に対しては、DB2® がデフォルト値を生成するため、DEFAULT を指定できません。
- ID 列 (AS IDENTITY として定義される列)
- 行変更タイム・スタンプ列
- 行開始列
- 行終了列
- トランザクション開始 ID 列
- 生成式列
- XML 列のデフォルトは、NULL です。ただし、NOT NULL を指定した場合、デフォルトはありません。
- DEFAULT キーワードの後に値が指定されていない場合は、次のようになります。
- 列がNULL 可能の場合、デフォルト値は NULL 値になります。
- 列がNULL 可能でない場合、デフォルト値は列のデータ・タイプによって決まります。
データ・タイプ デフォルト値 数値 0 固定長文字またはグラフィック・ストリング ブランク 固定長バイナリー・ストリング 16 進ゼロ 可変長ストリング 0 のストリング長 日付 INSERT の時点の当日の日付 時刻 INSERT の時点の当日の時刻 タイム・スタンプ INSERT の時点の当日のタイム・スタンプ データ・リンク DLVALUE('','URL','') に対応する値 特殊タイプ 特殊タイプの対応するソース・タイプのデフォルト値
NOT NULL および DEFAULT を列の定義 から省いた場合、DEFAULT NULL の暗黙の指定が取られます。
- constant
- その列のデフォルト値としての定数を指定します。 これは、割り当ておよび比較で説明している割り当て規則に従って、その列に割り当てることができる値を表す定数にする必要があります。 浮動小数点定数または 10 進浮動小数点定数は、SMALLINT、INTEGER、DECIMAL、または NUMERIC 列に使用してはなりません。10 進定数には、小数点より右方に、その列に指定された位取りより多くの桁を含めてはなりません。
- USER
- INSERT または UPDATE の時点での USER 特殊レジスターの値を、その列のデフォルト値として指定します。 この列のデータ・タイプは、USER 特殊レジスターの長さ属性と同じか それより大きい長さ属性を持つ CHAR または VARCHAR でなければなりません。
- NULL
- その列のデフォルト値として NULL を指定します。 NOT NULL を指定する場合は、同じ列の定義 内で DEFAULT 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 として定義された列でのみ使用することができます。
次の表は、これらのキャスト関数 の許可されている使用法を示します。
データ・タイプ キャスト関数名 BINARY、VARBINARY、BLOB、CLOB、または DBCLOB に基づく特殊タイプ N BINARY、VARBINARY、BLOB、CLOB、または DBCLOB * DATE、TIME、または TIMESTAMP に基づく特殊タイプ N N (N の作成時に生成されたユーザー定義のキャスト関数) ** あるいは
DATE、TIME、または TIMESTAMP *他のデータ・タイプに基づく特殊タイプ N (N の作成時に生成されたユーザー定義のキャスト関数) ** BINARY、VARBINARY、BLOB、CLOB、または DBCLOB BINARY、VARBINARY、BLOB、CLOB、または DBCLOB * DATE、TIME、または TIMESTAMP DATE、TIME、または TIMESTAMP * 注 :* 関数には、QSYS2 の暗黙的または明示的スキーマ名のデータ・タイプ (または、特殊タイプのソース・タイプ) の名前と一致する名前を指定する必要があります。
** 関数には、列の特殊タイプの名前と一致する名前を指定する必要があります。 スキーマ名で修飾する場合は、特殊タイプのスキーマ名と同じ名前 を指定する必要があります。修飾しない場合は、関数の解析から得られるス キーマ名は、特殊タイプのスキーマ名と同じ名前にする必要があります。
- constant
- 定数を引数として指定します。この定数は、特殊タイプのソース・タイプの定数、あるいは、特殊タイプでない場合は、データ・タイプの定数の規則に準拠する必要があります。BINARY、VARBINARY、 BLOB、 CLOB、DBCLOB、DATE、TIME、および TIMESTAMP 関数の場合は、この定数をストリング定数にする必要があります。
- USER
- INSERT または UPDATE の時点での USER 特殊レジスターの値をその列 のデフォルト値として指定します。 この列の特殊タイプのソース・タイプのデータ・タイプは、USER 特殊 レジスターの長さ属性と同じかそれより大きい長さ属性を持つ CHAR また は VARCHAR でなければなりません。
- 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 列
- 生成式列
- ALWAYS
- 行の挿入時または更新時にデフォルト値を生成しなければならない場合に、データベース・マネージャーが常に列の値を生成することを指定します。ALWAYS は推奨値です。
- BY DEFAULT
- 行の挿入時または更新時にデフォルト値を生成しなければならない場合に、明示的な値が指定されていない限り、データベース・マネージャーが列の値を生成することを指定します。
ID 列または行変更タイム・スタンプ列の場合は、データベース・マネージャーは指定された値を挿入または更新しますが、その ID 列または行変更タイム・スタンプ列がユニーク制約を持っているか、その ID 列または行変更タイム・スタンプ列を単独で指定するユニーク索引を持っている場合を除き、その値がその列の固有な値であるかどうかの検査は行いません。
- AS IDENTITY
- 列が表の ID 列であることを指定します。表には 1 つの ID 列しか入りません。AS IDENTITY を指定できるのは、列のデータ・タイプが、厳密に位取りがゼロの数値タイプ (SMALLINT、INTEGER、BIGINT、
DECIMAL、または位取りがゼロの NUMERIC、
またはこれらのデータ・タイプに基づく特殊タイプ) である場合だけです。
DECIMAL または NUMERIC データ・タイプが指定された場合、精度は 31 以下でなければなりません。
ID 列は暗黙的に NOT NULL になります。ID 列に DEFAULT 文節を指定することはできません。識別属性の説明については、CREATE TABLE内の AS IDENTITY 文節を参照してください。
- FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
- 列がタイム・スタンプであり、値はデータベース・マネージャーによって生成されることを指定します。 データベース・マネージャーは、行が挿入されるたびに各行の列に値を生成し、また列が更新されるたびに各行に値を生成します。 行変更タイム・スタンプ列に生成される値は、その行の挿入または更新の時刻に対応するタイム・スタンプです。1 つの SQL ステートメントを指定して複数の行が挿入される場合、行変更タイム・スタンプ列の値は、各行が挿入された時点を反映するために行ごとに異なる可能性があります。 生成された値が固有である保証はありません。
- 表には、行変更タイム・スタンプ列を 1 つだけ指定できます。データ・タイプ を指定 する場合は、精度 6 の TIMESTAMP であるか、または、精度 6 の TIMESTAMP に 基づく特殊タイプでなければなりません。行変更タイム・スタンプ列の場合、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’です。
- 行終了列は、SYSTEM_TIME 期間の 2 番目の列として必要です。
- 表には 1 つの行終了列のみを含めることができます。data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。この列には DEFAULT 節を指定できないため、NOT NULL として定義する必要があります。行終了列は更新できません。
- AS TRANSACTION START ID
- これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合には、その列に NULL 値が割り当てられます。 それ以外の場合、この値は、次のいずれかの場合に時刻機構を読み取ることによって生成されます。(1) トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメントを最初に実行するとき。(2) システム期間テンポラル表に含まれる行を削除するとき。 単一の 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 ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。
- data-type は、以下の表に従って定義する必要があります。この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。
特殊レジスター 列のデータ・タイプ 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) - built-in-global-variable
- 挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーによって組み込みグローバル変数の値が割り当てられることを指定します。 データ変更ステートメントの時点での組み込みグローバル変数の値が使用されます。 単一の SQL ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。
- data-type は、以下の表に従って定義する必要があります。この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。
組み込みグローバル変数 列のデータ・タイプ 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) - FIELDPROC
- 列のフィールド・プロシージャー出口ルーチンとして、外部プログラム名 を指定します。SQL が含まれていない ILE プログラムを指定する必要があります。 サービス・プログラムを指定することはできません。
- このフィールド・プロシージャーは列の値のエンコードとデコードを行います。列に値が挿入されるときは、フィールド・プロシージャーに渡されてエンコードされて から挿入されます。列に入っている値が使用されるときは、フィールド・プロシージャーに渡されてデコードされてから使用されます。
- フィールド・プロシージャーは、CREATE TABLE ステートメントの
処理中にも呼び出されます。この呼び出しの場合、プロシージャーは DB2 に列のフィールド記述を提供します。フィールド記述は、エンコードされた値のデータ特性を定義します。一方、CREATE TABLE ステートメントで列について指定する情報では、デコードされた値のデータ特性を定義します。
- constant
- フィールド・プロシージャーの呼び出し時にフィールド・プロシージャーに渡すパラメーターを指定します。パラメーター・リストはオプションです。
- ROWID または DATALINK の列、あるいは ROWID または DATALINK に基づく特殊タイプの列でフィールド・プロシージャーを定義することはできません。この列は、ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、および生成式列であってはなりません。この列に、CURRENT DATE、CURRENT TIME、CURRENT TIMESTAMP、USER のいずれかのデフォルト値が入っていてはなりません。チェック条件でこの列を参照することはできません。この列が外部キーの一部になっている場合は、対応する親キー列でも同じフィールド・プロシージャーを使用する必要があります。フィールド・プロシージャーの例については、『組み込み SQL プログラミング』トピック集を参照してください。
- NOT NULL
- 列に NULL 値が入るのを防止します。NOT NULL を指定しないことは、その列が NULL であってもよいことを意味します。行変更タイム・スタンプ列、行開始列、および行終了列には、NOT NULL が必要です。
- NOT HIDDEN
- 列が SQL ステートメントの表の暗黙的参照に組み込まれることを示します。これはデフォルトです。
- IMPLICITLY HIDDEN
- 名前で明示的に参照されない限り、列は SQL ステートメントから不可視であることを示します。例えば、SELECT * は、結果に隠し列を含みません。 表には、少なくとも 1 つの IMPLICITLY HIDDEN でない列が含まれていなければなりません。
- datalink-options
- DATALINK データ・タイプに関連したオプションを指定します。
- LINKTYPE URL
- リンクのタイプを URL として定義します。
- NO LINK CONTROL
- これを指定すると、リンク済みファイルが存在するか否かを判別する ための検査は行われなくなります。URL の構文だけが検査されます。 リンク済みファイルに関してデータベース・マネージャー制御は行われません。
- period-definition
- PERIOD FOR
- 表の期間を定義します。
- SYSTEM_TIME (begin-column-name, end-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 に対応する履歴表の列はその行の削除を反映するように設定されます。この名前は、表内に存在する列を示すものでなければなりません。end-column-name は AS ROW END として定義する必要があります。
LIKE
- table-name または view-name
- 指定の表また
はビューに定義されている列をこの表に含めることを指定します。
LIKE 文節で指定する table-name または view-name は、アプリケーション・サーバーに既に存在している表またはビューを識別していなければなりません。
LIKE の使用は、n 列 (n は、識別された表またはビュー内の列数) を暗黙的 に定義したことになります。この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合)
- 列名 (および、システム列名)
- データ・タイプ、長さ、精度、および位取り
- CCSID
表名 の直後に LIKE 文節を指定し、括弧で囲まなかった場合 は、以下の列属性も含まれます。その他の場合は、これらの属性は含まれません (デフォルト値、識別、行変更タイム・スタンプ、および隠し属性は、コピー・オプション を使用して制御することもできます)。
- デフォルト値 (表名 が指定され、ビュー名 は指定されていない場合)
- 識別属性
- NULL 可能性
- 隠し属性
- 行変更タイム・スタンプ属性
- 列の見出しとテキスト (LABELを参照)
table-name に行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列が含まれている場合、新しい表の対応する列はソース列のデータ・タイプのみを継承します。 この新しい列は、生成された列とは見なされません。
指定された表またはビューが非 SQL 作成の物理ファイルまたは論理ファ イルの場合、非 SQL 属性は除去されます。例えば、日付と時刻の形式は ISO 形式に変更されます。
暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。例えば、新規の表には、表からの基本キーや外部キーは自動的には組み込 まれません。新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。
as-result-table
- column-name
- 表を構成する列の名前を指定します。 列名 は修飾できません。表の複数の列や表のシステム列名に同じ名前を使用することもできません。
- FOR COLUMN system-column-name
- 列の IBM i 名を指定します。表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。
システム列名が指定されず、また列名が有効なシステム列名でない場合には、システム列名が生成されます。 システム列名の生成方法に関する詳細については、列名の生成の規則を参照してください。
- select-statement
- 表の列の名前および記述が、選択ステートメント を実行した場合
に選択ステートメント の派生結果表に現れる列と同じになるようにすることを指定します。
AS 選択ステートメント を使用すると、この表について n 個の列を暗黙的に
定義したことになります。n は、選択ステートメント の結果として発生する列の数です。
この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):
- 列名 (および、システム列名)
- データ・タイプ、長さ、精度、および位取り
- CCSID
- NULL 可能性
- 列の見出しとテキスト (LABELを参照)
以下の属性は組み込まれません (一部の属性は、copy-options を使用して組み込むことができます)。
- デフォルト値
- 非表示属性
- 識別属性
- 行変更タイム・スタンプ属性
- 行開始、行終了、およびトランザクション開始 ID 属性
- 生成式属性
暗黙の定義には、選択ステートメント で参照された表またはビューのその他のオプション属性は含まれません。
暗黙的に定義された列は、選択ステートメント の結果表の列の名前を継承します。 したがって、すべての結果列について、選択ステートメント また は列名リストの中で列名を指定する必要があります。 式、定数、および関数から派生する結果列については、選択ステートメント で 結果列の直後に AS 列名文節を指定するか、選択ステートメント の 前の列リスト内に名前を指定する必要があります。
選択ステートメント は、変数または組み込みパラメーター ・マーカー (疑問符) を参照するものであってはなりません。 選択ステートメント には、PREVIOUS VALUE 式または NEXT VALUE 式を含めてはなりません。UPDATE、SKIP LOCKED DATA、USE AND KEEP EXCLUSIVE LOCKS の各文節を指定することはできません。
select-statement が isolation-clause を含む場合、isolation-clause で指定された分離レベルが SQL ステートメント全体に適用されます。
- WITH DATA
- 選択ステートメント を実行することを指定します。 表の作成後に、選択ステートメント の結果表の行が自動的に表に挿入されます。
- WITH NO DATA
- 選択ステートメント を実行しないことを指定します。 したがって、自動的に表に挿入される行のセットを持つ結果表はありません。
copy-options
- INCLUDING IDENTITY COLUMN ATTRIBUTES または EXCLUDING IDENTITY COLUMN ATTRIBUTES
- ID 列の属性を継承するかどうかを指定します。
- INCLUDING IDENTITY COLUMN ATTRIBUTES
- この表が、選択ステートメント、表名、また
はビュー名 の結果として生じる列の識別属性 (もしあれば) を
継承することを指定します。
一般に、識別属性がコピーされるのは、表、ビュー、または選択ステートメント の中の対応する列のエレメントが、識別属性を持つ基本表列の名前に直接または間接にマップされる表列またはビュー列の名前である場合です。
INCLUDING IDENTITY COLUMN ATTRIBUTES 文節と AS 選択ステートメント 文節を
指定してあるときは、以下の場合には新規の表の列は識別属性を継承しません。
- 選択ステートメント の選択リストに、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 の時点の当日のタイム・スタンプ データ・リンク DLVALUE('','URL','') に対応する値 特殊タイプ 特殊タイプの対応するソース・タイプのデフォルト値 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
- この表が、全選択、表名、またはビュー名 の結果として生じる列の行変更タイム・スタンプ属性 (もしあれば) を継承しないことを指定します。
- WITH REPLACE
- 指定した名前の宣言済み一時表が既に存在している場合に、その既存の表を、このステートメントで定義した一時表で置き換える (そして既存の表のすべての行を削除する) ことを指定します。
WITH REPLACE を指定しない場合は、現行セッション内に既に存在しているどの宣言済み一時表とも異なる名前を指定する必要があります。
- ON COMMIT
- COMMIT 操作が行われるときにこの宣言済み一時表に対して行うアクションを指定します。デフォルトは DELETE ROWS です。
この宣言済み一時表が No Commit (NC) 分離レベルでオープンされた場合、または COMMIT HOLD 操作が行われる場合は、ON COMMIT 文節は適用されません。
- DELETE ROWS
- 表について WITH HOLD カーソルがオープンされていない場合は、表の すべての行が削除されます。
- PRESERVE ROWS
- 表の行は保存されます。
- NOT LOGGED
- 表に対する変更 (表の作成も含む) をログに記録しないことを指定します。
ROLLBACK (または ROLLBACK TO SAVEPOINT) 操作を行うときに、この
作業単位 (またはセーブポイント) で表が変更されていても、その変更はロールバックされません。
この作業単位 (またはセーブポイント) の中で表を作成した場合、その表は除去されます。
この作業単位 (またはセーブポイント) の中で表を除去した場合は、その
表は復元されますが、行は含まれていません。
- ON ROLLBACK
- ROLLBACK 操作が行われるときにこの宣言済み一時表に対して行うアクションを指定します。
この宣言済み一時表が No Commit (NC) 分離レベルでオープンされた場合、または ROLLBACK HOLD 操作が行われる場合は、ON ROLLBACK 文節は適用されません。
- DELETE ROWS
- 表のすべての行が削除されます。 これはデフォルトです。
- PRESERVE ROWS
- 表の行は保存されます。
- RCDFMT format-name
- 表の IBM i レコード・フォーマット名を指定する非修飾名です。
format-name は、システム ID です。
レコード・フォーマット名が指定されない場合、format-name は、表の system-object-name と同一のものになります。
- media-preference
- 表の優先ストレージ・メディアを指定します。
- UNIT ANY
- どのストレージ・メディアも優先しません。表のストレージは、使用可能な任意のストレージ・メディアから割り振られます。
- UNIT SSD
- ソリッド・ステート・ディスク・ストレージ・メディア を優先します。表のストレージは、使用可能な場合にはソリッド・ステート・ディスク・ストレージ・メディアから割り振ることができます。
- KEEP IN MEMORY
- 表のデータ
が照会で使用されるときに、データを主記憶域プールに入れるかどうかを指定します。
- NO
- データは主記憶域プールに入れられません。
- YES
- データは主記憶域プールに入れられます。
注
インスタンス化、有効範囲、および終了 : P は アプリケーション・プロセスを表し、T は、P の中の アプリケーション・プログラム内の宣言済み一時表であるものとします。
- P の中のプログラムが DECLARE GLOBAL TEMPORARY TABLE ステートメントを 発行すると、T の空のインスタンスが作成されます。
- P の中のどのプログラムも T を参照でき、それらの参照はどれも T の
同じインスタンスに対する参照です。(SQL 関数、SQL プロシージャー、または
トリガーの複合ステートメント内で DECLARE GLOBAL TEMPORARY ステートメント
を指定した場合は、宣言済み一時表の有効範囲は、その複合ステートメント
ではなくアプリケーション・プロセスです。)
T がリモート・サーバーで宣言されたものである場合は、T に対する参照で は、T を宣言するときに使用したものと同じ接続を使用する必要があり、そ の接続は T の宣言後に終了していてはなりません。 T が宣言されたデータベース・サーバーへの接続が終了すると、T は除去されます。
- T の定義に ON COMMIT DELETE ROWS 文節が含まれている場合は、コミット 操作により P の中の 1 つの作業単位が終了した時点で、P の中のどの プログラムについても T に依存する WITH HOLD カーソルがオープン状態に ないときは、すべての行が削除されます。
- T の定義に ON ROLLBACK DELETE ROWS 文節が含まれている場合 は、ロールバック操作により P の中の 1 つの作業単位が終了した時点で、すべての行が削除されます。
- T を宣言したアプリケーション・プロセスが終了すると、T は除去されます。
一時表の所有権 : この表の 所有者 は、このステートメントを実行している スレッドのユーザー・プロファイルです。
一時表の権限 : 宣言済み一時表を定義する ときに、その表に関するすべての表特権、およびその表を除去する権限 が、PUBLIC に対して暗黙に認可されます。
他の SQL ステートメント内での宣言済み一時表 の参照 : 多くの SQL ステートメントが宣言済み一時表をサポートしています。 DECLARE GLOBAL TEMPORARY TABLE 以外の SQL ステートメントの中で 一時表を参照するには、その表を暗黙的または明示的に SESSION で修飾する 必要があります。
表名の修飾子として SESSION を使用しても、アプリケーション・プロセス に、その表名についての DECLARE GLOBAL TEMPORARY TABLE ステートメントが 含まれていない場合は、データベース・マネージャーは、宣言済み一時表が参照されているのでは ないと判断します。 そして、データベース・マネージャーは、このような表参照を永続表に解決します。
宣言済み一時表の使用に関する制限 :
- ALTER TABLE、COMMENT、CREATE ALIAS、GRANT、LABEL、LOCK、 RENAME、または REVOKE ステートメントでは、宣言済み一時表は指定できません。
- 宣言済み一時表は、参照制約の中で親表として指定することはできません。
- CREATE INDEX または CREATE VIEW ステートメントで宣言済み一時表を 参照する場合は、該当の索引またはビューは、SESSION (または QTEMP ライブラリー) の 中に作成する必要があります。
リモート選択ステートメントを使用した表作成: as-result-table の select-statement は、表を作成するサーバーとは別のサーバー上の 表を参照できます。これを行うには、3 部構成のオブジェクト名を使用するか、または、表またはビューの 3 部構成の名前を参照するよう定義された別名を 使用します。select-statement の結果は、フィールド・プロシージャーが定義された列を 含むことはできません。リモート・サーバー が DB2 for LUW または DB2 for z/OS® である場合、copy-options は許可されません。リモート・サーバー が DB2 for LUW の場合、AS キーワードの前に列リストを明示的に指定する必要があります。
代替構文: 以下のキーワードは、旧リリースとの互換性を維持するためにサポートされている同義語です。 これらのキーワードは標準キーワードではないので、原則として使用しないようにしてください。
- INLINE LENGTH は ALLOCATE の同義語です。
- DEFINITION ONLY は WITH NO DATA の同義語です。
例
例 1: 社員番号、給与、歩合給、および賞与に関する列定義のある宣言済み 一時表を定義します。
DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_EMP
(EMPNO CHAR(6) NOT NULL,
SALARY DECIMAL(9, 2),
BONUS DECIMAL(9, 2),
COMM DECIMAL(9, 2))
ON COMMIT PRESERVE ROWS
例 2: USER1.EMPTAB という基本表に 3 つの列があり、その 1 つが ID 列であるとします。 この基本表を同じ列名および属性 (識別属性も含む) を持つ一時表を宣言します。
DECLARE GLOBAL TEMPORARY TABLE TEMPTAB1
LIKE USER1.EMPTAB
INCLUDING IDENTITY
ON COMMIT PRESERVE ROWS
上記の例では、データベース・マネージャーは TEMPTAB1 の暗黙修飾子として SESSION を使用します。