SQL 解説書

DECLARE GLOBAL TEMPORARY TABLE

DECLARE GLOBAL TEMPORARY TABLE ステートメントは、現行セッションの一時表を定義します。 宣言された一時表の記述は、システム・カタログには現れません。 これは永続的なものではなく、他のセッションと共用することもできません。 同じ名前の宣言されたグローバル一時表を定義するセッションであっても、 一時表の記述はそのセッションによって異なります。 セッションが終了すると、表の行は削除され、一時表の記述はドロップされます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、 または動的 SQL ステートメントを使用して発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。

許可

このステートメントの許可 ID には、以下の権限が少なくとも 1 つ含まれている必要があります。

LIKE または全選択を使用して表を定義する場合、 非分離のストアード・プロシージャーを作成するには、ステートメントの許可 ID の特権に、 識別されているそれぞれの表または視点に対する以下の権限が少なくとも 1 つ以上含まれている必要があります。

構文

>>-DECLARE GLOBAL TEMPORARY TABLE--table-name------------------->
 
           .-,------------------------.
           V                          |
>-----+-(-----| column-definition |---+---)--------------------------+>
      +-LIKE--+-table-name2-+---+-------------------+----------------+
      |       '-view-name---'   '-| copy-options |--'                |
      '-AS--(--fullselect--)--DEFINITION ONLY--+-------------------+-'
                                               '-| copy-options |--'
 
                             .-ON COMMIT DELETE ROWS---.
>----*--+--------------+--*--+-------------------------+---*--NOT LOGGED--*->
        '-WITH REPLACE-'     '-ON COMMIT PRESERVE ROWS-'
 
>----+----------------------+---*------------------------------->
     '-IN--tablespace-name--'
 
>----+------------------------------------------------------------------+---*->
     |                      .-,--------------.                          |
     |                      V                |      .-USING HASHING-.   |
     '-PARTITIONING KEY--(-----column-name---+---)--+---------------+---'
 
>--------------------------------------------------------------><
 
column-definition
 
|---column-name---| data-type |----+---------------------+------|
                                   '-| column-options |--'
 
column-options
 
|---*--+-----------+---*--+------------------------------------------------------+---*-->
       '-NOT NULL--'      +-| default-clause |-----------------------------------+
                          '-GENERATED--+-ALWAYS-----+---AS--| identity-clause |--'
                                       '-BY DEFAULT-'
 
>---------------------------------------------------------------|
 
copy-options
 
                                                                            .-COLUMN ATTRIBUTES-.
                                                      .-EXCLUDING IDENTITY--+-------------------+--.
|---*--+---------------------------------------+---*--+--------------------------------------------+---*-->
       |                 .-COLUMN-.            |      |                    .-COLUMN ATTRIBUTES-.   |
       '--+-INCLUDING-+--+--------+--DEFAULTS--'      '-INCLUDING IDENTITY-+-------------------+---'
          '-EXCLUDING-'
 
>---------------------------------------------------------------|
 

説明

table-name
一時表の名前を示します。 修飾子を明示的に指定する場合は、SESSION でなければなりません。 そうしないと、エラーになります (SQLSTATE 428EK)。 修飾子が指定されなければ、暗黙的に SESSION が指定されます。

同じ table-name の宣言されたグローバル一時表を定義するセッションであっても、 その宣言されたグローバル一時表の記述はそれぞれのセッションによって異なります。 table-name を使用する宣言された一時表がセッション内にすでに存在している場合は、 WITH REPLACE 文節を指定する必要があります (SQLSTATE 42710)。

表、視点、別名、またはニックネームについては、 同じ名前および同じスキーマ名 (SESSION) を持つものがカタログ内にすでに存在していても構いません。 このような場合には、次のような処理が行われます。

column-definition
一時表の列の属性を定義します。

column-name
表を構成する列の名前を指定します。 名前を修飾したり、表の複数の列に対して同じ名前を使用することはできません (SQLSTATE 42711)。

表には、以下のものを指定できます。

  • 最大 500 列の 4K ページ・サイズ。 列のバイト・カウントは 4K ページ・サイズで 4005 を超えてはなりません。 詳細については、行サイズを参照してください。
  • 最大 1 012 列の 8K ページ・サイズ。 列のバイト・カウントは 8 101 を超えてはなりません。 詳細については、行サイズを参照してください。
  • 最大 1 012 列の 16K ページ・サイズ。 列のバイト・カウントは 16 293 を超えてはなりません。 詳細については、行サイズを参照してください。
  • 最大 1 012 列の 32K ページ・サイズ。 列のバイト・カウントは 32 677 を超えてはなりません。 詳細については、行サイズを参照してください。

data-type
使用可能なタイプについては、 CREATE TABLEdata-type を参照してください。 宣言されたグローバル一時表では、BLOB、CLOB、DBCLOB、LONG VARCHAR、LONG VARGRAPHIC、DATALINK、 参照、および構造タイプを使用できませんのでご注意ください (SQLSTATE 42962)。 なお、この例外として、これらの制限されたタイプをソースとする特殊タイプがあります。

FOR BIT DATA は、文字ストリング・データ・タイプの一部として指定することができます。

column-options
表の列に関連した追加オプションを定義します。

NOT NULL
列にヌル値が入るのを防止します。 ヌル値の指定については、CREATE TABLENOT NULL を参照してください。

default-clause
デフォルトの指定については、 CREATE TABLEdefault-clause を参照してください。

identity-clause
識別列の指定については、 CREATE TABLEidentity-clause を参照してください。

LIKE table-name2 または view-name
表の列の名前と記述が、指定された表 (table-name2)、 視点 (view-name)、またはニックネーム (nickname) の列とまったく同じであることを示します。 LIKE の後に指定する名前は、カタログか宣言された一時表に存在している表、視点、 またはニックネームを識別するものでなければなりません。 タイプ付き表またはタイプ付き視点を指定することはできません (SQLSTATE 428EC)。

LIKE は、n 列の暗黙的な定義で使用します。 n は、指定した表または視点に含まれる列の数を表します。

copy-attributes 文節に基づいて、 列のデフォルトと ID 列属性を組み込んだり除外したりすることができます。

指定した表や視点のこの他の属性は、暗黙的な定義には含めません。 したがって、新しい表には固有制約、外部キー制約、トリガー、または索引はありません。 表は、IN 文節の指定に従って、表スペースの中に明示的または暗黙的に作成されます。

table-name2view-name には、 作成されているグローバル一時表と同じ名前を使用することはできません (SQLSTATE 428EC)。

AS (fullselect) DEFINITION ONLY
表定義が、照会式の結果による列定義に基づいていることを示します。 AS (fullselect) は、 宣言されたグローバル一時表に対する n 列の暗黙的な定義で使用されます。 n は、fullselect の結果として得られる列の数を表します。 新しい表の列は、これらの fullselect で得られた列に基づいて定義されます。 選択リストの各エレメントの名前は、それぞれ固有なものでなければなりません (SQLSTATE 42711)。 SELECT 文節で AS 文節を使用すると、それぞれのエレメントに固有の名前を付けることができます。

暗黙的な定義では、fullselect の各結果列について、 その列名、データ・タイプ、およびヌル可能特性を定義します。

copy-options
これらのオプションでは、 ソースの結果表定義 (表、視点、または全選択) から付加的な属性をコピーするかどうかを指定します。

INCLUDING COLUMN DEFAULTS
ソース結果表の定義の更新可能な各列の列デフォルトをコピーします。 更新可能でない列では、作成される表の対応列内にデフォルトが定義されないことになります。

LIKE table-name2 が指定されており、 かつ table-name2 が基礎表か宣言された一時表である場合に限り、 この INCLUDING COLUMN DEFAULTS がデフォルトとして使用されます。

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

この文節がデフォルトです。ただし、LIKE table-name が指定され、 しかも table-name が基礎表または一時表を指定する場合を除きます。

INCLUDING IDENTITY COLUMN ATTRIBUTES
この文節を使用すると、 ソースの結果表定義から識別列の属性 (START WITH、INCREMENT BY、および CACHE の値) がコピーされます。 これらの属性をコピーできるのは、表、視点、または全選択内の対応する列のエレメントが、 識別のプロパティーが含まれている基礎表の列名に直接または間接的にマップされた表の列の名前、 または視点の列の名前である場合です。 これ以外の場合は、新しい一時表の列に識別のプロパティーは定義されません。 たとえば、次のような場合があります。
  • 全選択の選択リストに識別列の名前のインスタンスが複数含まれている (つまり、 同じ列を複数回選択している) 場合
  • 全選択の選択リストに複数の識別列が含まれている (つまり、結合が関与している) 場合
  • 識別列が選択リスト内の式に組み込まれている場合
  • 全選択にセット演算 (UNION (合併)、EXCEPT (差)、または INTERSECT (論理積)) が含まれている場合

EXCLUDING IDENTITY COLUMN ATTRIBUTES
ソース結果表の定義から ID 列属性はコピーされません。

ON COMMIT
COMMIT 操作の実行時にグローバル一時表で行うアクションを指定します。

DELETE ROWS
表にオープンされている WITH HOLD カーソルがなければ、すべての行が表から削除されます。 これはデフォルト値です。

PRESERVE ROWS
表の行が保存されます。

NOT LOGGED
表の作成を含め、表に対して行われた変更は記録されません。 たとえば、作業単位 (または保管点) で表に変更を加えていた場合は、 ROLLBACK (または ROLLBACK TO SAVEPOINT) 操作を実行すると表の行がすべて削除されます。 また、作業単位 (または保管点) で表を作成していた場合には、その表は除去されます。 そして作業単位 (または保管点) で表を除去していた場合には、 表が復元されますが、行は復元されません。 さらに、表で INSERT、UPDATE、または DELETE 操作を実行するステートメントにエラーが発生した場合も、 表の行はすべて削除されてしまいます。

WITH REPLACE
ユーザーが指定した名前を持つグローバル一時表がすでに存在している場合は、 既存の表をこのステートメントで定義された一時表と置き換える (および既存の表の行をすべて削除する) よう指示します。

WITH REPLACE が指定されていない場合は、 現行セッションにすでに存在しているグローバル一時表の名前を指定することはできません (SQLSTATE 42710)。

IN tablespace-name
グローバル一時表をインスタンス化する表スペースを指定します。 ここでは、既存の USER TEMPORARY 表スペースを指定する必要があります (SQLSTATE 42838)。 また、ステートメントの許可 ID にはその表スペースに対する USE 特権が含まれていなければなりません (SQLSTATE 42501)。 この文節が指定されない場合、 表をインスタンス化する表スペースは USER TEMPORARY 表スペースの中から選択され、 その中のステートメントの許可 ID に USE 特権が含まれている表スペースで、 かつ必要なページ・サイズに最も適したサイズの表スペースが使用されます。 複数の表スペースがそれにあてはまる場合、 以下のどれに USE 特権が付与されているかに応じて優先順位が決められます。

  1. 許可 ID
  2. 許可 ID を保有するグループ
  3. PUBLIC

それでも複数の表スペースがそれにあてはまる場合は、 最終選択はデータベース・マネージャーによって行われます。 条件にかなう USER TEMPORARY がない場合はエラーが戻されます (SQLSTATE 42727)。

表スペースの決定は、以下の時点で変更することができます。

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

PARTITIONING KEY (column-name,...)
表のデータが区分化されている場合に、区分化キーを指定します。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。

この文節の指定がなく、この表が複数区分のノードグループに存在する場合は、 その区分化キーが宣言された一時表の最初の列として定義されます。

宣言された一時表では、単一区分のノードグループに定義された表スペースにおいて、 すべての列の集合を区分化キーの定義に使用することができます。 このパラメーターの指定がない場合、区分化キーは作成されません。

区分化キーの列は更新できませんのでご注意ください (SQLSTATE 42997)。

USING HASHING
データ配分の区分化方式として、ハッシュ関数を使用することを指定します。 これは、サポートされる唯一の区分化方式です。


脚注:

89
GRANT オプションによって授与される特権はありません。 また、これらの特権はいずれもカタログ表には現れません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]