CREATE GLOBAL TEMPORARY TABLE ステートメント

CREATE GLOBAL TEMPORARY TABLE ステートメントは、現行のサーバー上に一時表の記述を作成します。

呼びかけ CREATE GLOBAL TEMPORARY TABLE

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

承認 CREATE GLOBAL TEMPORARY TABLE

以下に定義する特権セットには、少なくとも次のいずれかが含まれていなければいけません。

  • CREATETMTAB システム特権
  • 任意のデータベース用の CREATETAB データベース特権
  • 任意のデータベースに対する DBADM、DBCTRL、または DBMAINT 権限
  • SYSADM または SYSCTRL 権限
  • システム DBADM
  • 変更の開始インストール SYSOPR 権限 (プロセスの現行 SQLID が SYSINSTL に設定されている場合)変更の終わり

ただし、誰か他人のために一時表を作成しており、表修飾子が作成者の許可 ID でない場合には、DBADM、DBCTRL、または DBMAINT 権限では不十分です。

列のデータ・タイプが特殊タイプであるかまたは LIKE 文節が指定されている場合、 追加特権が必要になる可能性があります。 詳しくは 、distinct-type と LIKE の説明を参照してください。

特権セット:

権限セットはCREATE TABLE文の権限セットと同じです。 詳細については、CREATE TABLE Authorizationに関する情報を参照してください。

CREATE GLOBAL TEMPORARY TABLE の構文

構文図を読むビジュアルシンタックスダイアグラムをスキップする CREATE GLOBAL TEMPORARY TABLE table-name (,column-definition)LIKEtable-nameview-nameCCSIDASCIIEBCDICUNICODE

column-definition:

構文図を読むビジュアルシンタックスダイアグラムをスキップする カラム名 Data-type NOT NULL

データ・タイプ:

構文図を読むビジュアルシンタックスダイアグラムをスキップするbuilt-in-typedistinct-type-name

built-in-type:

構文図を読むビジュアルシンタックスダイアグラムをスキップするSMALLINTINTEGERINTBIGINTDECIMALDECNUMERIC(5,0)( 整数整数)FLOAT(53)( 整数)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( 整数)VARCHARCHARACTERCHARVARYING( 整数)FORSBCSMIXEDBITDATACCSID 12081GRAPHIC(1)( 整数)VARGRAPHIC( 整数)CCSID 12001BINARY(1)( 整数)BINARY VARYINGVARBINARY( 整数)DATETIMETIMESTAMP(6)(整数)WITHOUT TIME ZONEWITH TIME ZONE
注:
  • 1 CCSID 節は、EBCDIC 作成のグローバル一時テーブル内の文字列またはグラフィック文字列列に対してのみ指定する必要があります。

説明の対象: CREATE GLOBAL TEMPORARY TABLE

テーブル名
一時表の名前を示します。 名前(暗黙的または明示的な修飾子を含む)は、データベース・サーバに存在するテーブル、ビュー、エイリアス、シノニム、一時テーブル、または SYSIBM.SYSPENDINGOBJECTS カタログ・テーブルに存在するテーブルを特定するものであってはなりません。

一時表に対しての修飾規則はその他の表の規則と同じです。

所有者は表 WITH GRANT OPTION の ALL PRIVILEGES と 表をドロップするための権限が必要です。

詳細は、「テーブル名のガイドライン」 を参照してください。

列定義
表の各インスタンスについて列の属性を定義します。 定義される列の数 は 750 を超えることはできません。 最大レコード・サイズは、32714 バイトを超えることはできません。 最大行サイズは 32706 バイトを超えることはできません。(最大レコード・ サイズより 8 バイトだけ小さくなります。)
列名
列の名前。 名前を修飾してはならず、 表内の別の列の名前と同じであってはなりません。
データ・タイプ
列のデータ・タイプを指定します。 データ・タイプは、組み込みデータ・タイプまたは特殊タイプにすることができます。
一体型
列のデータ・タイプは組み込みデータ・タイプです。

データタイプに関する詳細および適用されるルールについては、 組み込み型を参照してください。

ディストインクトタイプ
LOB または ROWID データ・タイプに基づくものを除く、任意の特殊タイプ。 特権セットには、特殊タイプの USAGE 特権が暗黙的または明示的に含まれている必要があります。
NOT NULL
列に NULL を含むことができないことを指定します。 NOT NULL を省略すると、 列に NULL を含むことができることを指定します。
LIKE table-name または view-name
CREATE GLOBAL TEMPORARY TABLE table-name 句で識別されるテーブルの列の名前と説明が、LIKE table-name 句または LIKE view-name 句で識別される列とまったく同じであることを指定します。 LIKE の後に指定する名前は、現在のサーバに存在するテーブル、ビュー、または一時テーブルを特定する必要があります。 LIKE の後に指定する名前は、アクセラレータ専用テーブルであってはなりません。 ビューは、長さ 0 の列を含むことはできません。

特権セットは指定された表またはビューの SELECT 特権を 暗黙的または明示的に含まなければなりません。

LIKE table-name句で指定されたテーブルが作成された一時テーブルでない場合、または LIKE view-name句で指定されたビューが作成された一時テーブルに基づかない場合:
  • LIKE table-name 句または LIKE view-name 句で識別されるテーブルまたはビューの列に、一時テーブル内の列では許可されていない属性値がある場合、一時テーブルの作成時にその属性値は無視されます。 LIKE table-name または LIKE view-name の列に対応する新しく作成された一時テーブル内の列には、特に指定がない限り、その属性のデフォルト値が設定されます。
  • LIKE テーブル名または LIKE ビュー 名句で識別されるテーブルまたはビューの列で NULL 以外のデフォルト値が許可されている場合、新しい一時テーブルの作成時にそのデフォルト値は無視されます。 新しく作成された一時表内の、 table-name または view-name の列に対応する列にはデフォルト値がありません。これは、作成された一時表内のどの列にも NULL 以外のデフォルト値は許可されていないためです。
  • 変更の開始LIKE table-name 句またはLIKE view-name 句で識別されるテーブルまたはビューの列がDEFAULT NULLを持つNULL可能な列である場合、一時テーブルの作成時にDEFAULT NULLは無視されます。 table-name または view-nameの列に対応する一時テーブルの列にはデフォルト値がありません。変更の終わり
CCSID 符号化方式
表に保管されるストリング・データのコード化スキームを指定します。
ASCII
サーバーの ASCII CCSID を使用して、データをエンコードしなければならないことを指定します。

インストール・システムに有効な ASCII CCSID が指定されていない場合は、エラーが起こります。

EBCDIC
サーバーの EBCDIC CCSID を使用して、データをエンコードしなければならないことを指定します。

インストール・システムに有効な EBCDIC CCSID が指定されていない場合は、エラーが起こります。

ユニコード
Unicode 用のサーバーの CCSID を使用して、データをエンコードしなければならない ことを指定します。

インストール・システムに対して Unicode 用の有効な CCSID が指定されていないと、 エラーが起こります。

通常は、それぞれのコード化スキームに必要な CCSID はただ 1 つです。 混合データ、グラフィック・データ、または Unicode データを使用する場合は、追加の CCSID が必要です。 CCSID が定義されていない場合は、エラーが起こります。

変更の開始CCSID 文節は、作成済みの一時表、または作成済みの一時表内の個々の列に指定できます。 表に対して CCSID 文節が指定されている場合、 LIKE 文節も指定されているかどうかに関係なく、その CCSID は表のコード化スキームを指定します。 表に対して CCSID 文節が指定されていない場合、表のコード化スキームは EBCDIC です。変更の終わり

変更の開始列に対して CCSID 文節が指定されている場合、作成済みの一時表のコード化スキームは EBCDIC でなければなりません。 列に対して CCSID 文節が指定されておらず、表に対して LIKE 文節が指定されていない場合、列の CCSID は表の CCSID と同じになります。 LIKE が指定されていて、LIKE 文節で指定されているソース表が Unicode 列が入っている EBCDIC 表である場合、作成済みの一時表の中のソース表の Unicode 列に対応する列も Unicode になります。変更の終わり

CREATE GLOBAL TEMPORARY TABLE に関する注意事項

所有者特権

テーブルの所有者は、すべてのテーブル権限( GRANT文(テーブル権限またはビュー権限)を参照)を持ち、これらの権限を他の人に付与することができます。 オブジェクトの所有権についての詳細は、 Authorization, privileges, permissions, masks, and object ownershipを参照のこと。

インスタンス化と終了
T を現行サーバーで定義された一時表とし、P をアプリケーション・プロセスとします。
  • T の空のインスタンスは、P 内の任意のプログラム によって実行される OPEN、SELECT INTO、または SQL データ変更操作 内の T を暗黙的または明示的に最初に参照した結果として作成されます。
  • P 内の任意のプログラムは T を参照でき、P 内の プログラムによる任意の参照は T のそのインスタンスの 参照です。

    コミット操作が P 内の作業単位を終了し、T に 従属するオープンした WITH HOLD カーソルを持つプログラムが P 内に ない場合は、コミット操作には DELETE FROM T 操作が含まれます。

  • ロールバック操作が P 内の作業単位が終了させるとき、 ロールバック操作には DELETE FROM T 操作が含まれます。
  • T のインスタンスを作成したデータベース・サーバーへの接続が終了すると、T のインスタンスは破棄されます。 ただし、T の定義はそのまま残ります。 DROP TABLE ステートメントを実行して、T の定義をドロップ する必要があります。
制約事項および拡張機能
T が一時表であるとします。
  • T の列は NULL 以外のデフォルト値を持つことはできません。
  • T の列は LOB または ROWID データ・タイプ (または それに基づく特殊タイプ) を持つことはできません。
  • T はユニーク制約、参照制約、またはチェック制約を持つことはできません。
  • T は参照制約内の親として定義することはできません。
  • 以下のものから T を参照することはできません。
    • CREATE INDEX ステートメント。
    • LOCK TABLE ステートメント。
    • オブジェクトが T または T のビューである UPDATE ステートメントのオブジェクトとして使用する。 ただし、UPDATE ステートメントの WHERE 節で T を参照することはできます (MERGE ステートメントの更新操作を含む)。
    • Db2 ユーティリティコマンド。
  • T を CREATE VIEW ステートメントの全選択 で参照する場合は、 CREATE VIEW ステートメントに WITH CHECK OPTION 文節を指定することはで きません。
  • ALTER TABLE T は、ステートメントを使用して列を T に追加する場合にのみ有効です。 T に追加するすべての列のデフォルト値は null でなければなりません。

    Tを変更すると、そのテーブルを参照するパッケージはすべて無効になり、 Db2 は次回実行時にパッケージを自動的に再バインドします。

  • DELETE FROM T または T のビュー は ステートメントに WHERE 文節または WHERE CURRENT OF 文節を含んでいない 場合にのみ有効です。 また、 DELETE FROM T のビュー は、WHERE 文節 を指定せずにビューを作成した (CREATE VIEW) 場合にのみ 有効です。 DELETE FROM ステートメントは、表またはビューから すべての行を削除します。
  • 副選択の FROM 文節が T を参照することができます。 select-statement の最初の FROM 文節内の T を参照する場合は、FOR UPDATE 文節を指定することはできません。
  • DROP DATABASE ステートメントを使用して T を暗黙的にドロップすることはできません。 T をドロップするには、DROP TABLE ステートメントで T を参照します。
  • 3つの部分からなるテーブル名を使用するSQLステートメントによってインスタンス化された一時テーブルは、そのインスタンス化を確立した Db2 接続が終了しない限り、同じアプリケーションプロセス内で同じ名前を使用する別のSQLステートメントによってアクセスすることができます。
  • GRANT ALL PRIVILEGES ON T は有効ですが、T についての 特定の特権を獲得することはできません。

    すべての特権のうちで、ALTER、INSERT、DELETE、 および SELECT 特権が実際に T で使用できます。

  • REVOKE ALL PRIVILEGES ON T は有効ですが、T から特定の 特権を取り消すことはできません。
  • COMMIT 操作では、アプリケーション・プロセスのすべての一時表のすべての行が削除されますが、T に従属するオープン WITH HOLD カーソルがアプリケーション・プロセスのいずれかのプログラムにある場合は、T の行は削除されません。 さらに、RELEASE(COMMIT) が有効で、オープンされている WITH HOLD カーソルが T に従属していない場合は、T のすべての論理作業ファイルも削除されます。
  • ROLLBACK 操作を行うと、アプリケーション処理のすべての一時表の行と論理作業ファイルが すべて削除されます。
  • 一時表を使用する場合は、スレッドを再利用でき、 割り振り解除まで、一時表名の論理作業ファイルも 使用できます。 スレッドが再利用される場合は、 その一時表について新しい論理作業ファイルが割り振られることは ありません。
  • 以下のステートメントで T を参照することができます。
    ステートメント ステートメント ステートメント
    • ALTER FUNCTION
    • ALTER PROCEDURE
    • COMMENT
    • CREATE ALIAS
    • CREATE FUNCTION
    • CREATE PROCEDURE
    • CREATE SYNONYM
    • CREATE TABLE LIKE
    • CREATE VIEW
    • DESCRIBE TABLE
    • DECLARE TABLE
    • DELETE (WHERE 文節を含まない場合)
    • DROP TABLE
    • INSERT
    • ラベル
    • SELECT INTO

代替構文および同義語Db2 の以前のリリースとの互換性を保つため、列のデータ型を定義する際には、 VARCHAR(整数) の同義語として LONG VARCHAR を、 VARGRAPHIC(整数) の同義語として LONG VARGRAPHIC を指定することができます。 しかし、これらの同義語の使用は推奨されていません。ステートメントが処理された後、 Db2 はLONG VARCHARカラムをVARCHAR、LONG VARGRAPHICカラムをVARGRAPHICとみなすからです。

CREATE GLOBAL TEMPORARY TABLE

例 1: 一時表 CURRENTMAP を 作成します。 2 列に CODE および MEANING という名前を付け、両方とも NULL を許可しないよう定義します。 CODE は数値データを持ち、MEANING は文字データを持ちます。 インストール・パネル DSNTIPF のフィールド MIXED DATA の値が NO で、 列 MEANING のサブタイプが SBCS であるとします。
CREATE GLOBAL TEMPORARY TABLE CURRENTMAP
     (CODE INTEGER NOT NULL, MEANING VARCHAR(254) NOT NULL);
例 2: 一時表 EMP を作成します。
CREATE GLOBAL TEMPORARY TABLE EMP
     (TMPDEPTNO   CHAR(3)     NOT NULL,
      TMPDEPTNAME VARCHAR(36) NOT NULL,
      TMPMGRNO    CHAR(6)             ,
      TMPLOCATION CHAR(16)            );