table-reference
table-reference は、中間結果表を指定します。
- 1 The syntax for joined-table is covered in a separate topic; refer to joined-table.
- 2 TABLE can be specified in place of LATERAL.
- 3 The typed-correlation-clause is required for generic table functions. This clause cannot be specified for any other table functions.
- 4 WITH ORDINALITY can be specified only if the argument to the UNNEST table function is one or more ordinary array variables or functions with ordinary array return types; an associative array variable or function with an associative array return type cannot be specified (SQLSTATE 428HT).
- 5 An XMLTABLE function can be part of a table-reference. In this case, subexpressions within
the XMLTABLE expression are in-scope of prior range variables in the FROM clause. For more
information, see the description of
XMLTABLE
. - 6 Specifying a LIKE clause or at least one column definition is not mandatory for an
INSERT INTO <table> SELECT FROMstatement, which acts as an implicit LIKE with respect to the INSERT target table.
- single-table-reference が期間指定または tablesample-clause なしで指定されている場合、中間結果表は表の行になります。 period-specification を指定した場合、中間結果表は、期間が指定と一致するテンポラル表の行で構成されます。 tablesample-clause を指定すると、中間結果表は、表の行のサンプリングされたサブセットで構成されます。
- single-view-reference が期間指定なしで指定された場合、中間結果表はそのビューになります。 period-specification が指定されている場合、ビュー内のテンポラル表参照では、期間が指定と一致する行のみが考慮されます。
- single-nickname-reference を指定した場合、中間結果表は、そのニックネームのデータ・ソースからのデータになります。
- only-table-reference を指定した場合、中間結果表は、適用可能な副表またはサブビューを考慮せずに、指定された表またはビューの行のみで構成されます。
- outer-table-reference を指定した場合、中間結果表は、型付き表のすべての副表または型付きビューのサブビューに基づく仮想表を表します。
- analyze_table-expression が指定されている場合、結果表には、データベース内分析プロバイダー、名前付きモデル実装、および入力データを使用して特定のデータ・マイニング・モデルを実行した結果が含まれます。
- nested-table-expression を指定した場合、結果表は指定された全選択の結果になります。
- data-change-table-reference を指定した場合、中間結果表は、節に含まれる検索 UPDATE、検索 DELETE、または INSERT ステートメントによって直接変更される行のセットになります。
- table-function-reference を指定した場合、中間結果表は、表関数によって戻される行のセットになります。
- collection-derived-table を指定した場合、中間結果表は、UNNEST 関数によって戻される行のセットです。
- xmltable-expression を指定した場合、中間結果表は、 XMLTABLE 関数によって戻される行のセットになります。
- 結合表 を指定した場合、中間結果表は 1 つ以上の結合操作の結果になります。 詳しくは、 結合表を参照してください。
- external-table-reference が tablesample-clause なしで指定されている場合、中間結果表は、指定されたファイルによって表される外部表の行になります。 tablesample-clause が指定されている場合、中間結果表は、指定されたファイルによって表される外部表の行のサンプリングされたサブセットで構成されます。
- 単一表参照 (single-table-reference)
table-reference として指定する各 table-name は、アプリケーション・サーバーに存在する既存の表か、remote-object-name を使用して指定されたリモート・サーバーに存在する既存の表を示していなければなりません。 中間結果表は表の結果です。 table-name が型付き表を参照する場合、中間結果表は、その表とすべての副表の UNION ALL です (table-name の列のみ)。 period-specification をテンポラル表で使用して、行が中間結果表として戻される期間を指定できます。 tablesample-clause を使用して、行のサンプルを中間結果表として戻すことを指定できます。
CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターが NULL 以外の値の CTST に設定されていて、table-name がシステム期間テンポラル表を示している場合、表参照は、あたかも特殊レジスターが NULL 値に設定された状態で次の指定が含まれるかのように実行されます。
CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターが NULL 以外の値の CTBT に設定されていて、table-name がアプリケーション期間テンポラル表を示している場合、表参照は、あたかも特殊レジスターが NULL 値に設定された状態で次の指定が含まれるかのように実行されます。table-name FOR SYSTEM_TIME AS OF CTSTtable-name FOR BUSINESS_TIME AS OF CTBT単一ビュー参照 (single-view-reference)- table-reference として指定する各 view-name は、以下のオブジェクトのいずれかを示していなければなりません。
- アプリケーション・サーバーにある既存のビュー
- remote-object-name を使用して指定されたリモート・サーバーにあるビュー
- 共通表式の table-name
CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターが NULL 以外の値の CTST に設定されていて、view-name がシステム期間テンポラル表を示している場合、表参照は、あたかも特殊レジスターが NULL 値に設定された状態で次の指定が含まれるかのように実行されます。view-name FOR SYSTEM_TIME AS OF CTST
view-name FOR BUSINESS_TIME AS OF CTBT
単一ニックネーム参照 (single-nickname-reference) table-reference として指定する各 nickname は、アプリケーション・サーバーに存在する既存のニックネームを示していなければなりません。 中間結果表はニックネームの結果です。
テーブル参照のみONLY(table-name) または ONLY(view-name) を使用した場合は、該当する副表またはサブビューの行が中間結果表に含まれないことになります。 ONLY に指定した table-name に副表がない場合、 ONLY(table-name) は table-name を指定することと同じになります。 ONLY に指定した view-name にサブビューがない場合、 ONLY(view-name) は view-name を指定することと同じになります。
ONLY を使用するときには、 table-name の副表または view-name のサブビューごとに、 SELECT 権限が必要です。
外部表参照 (outer-table-reference)OUTER(table-name) または OUTER(view-name) を指定した場合、 それは仮想表を表します。 OUTER に指定した table-name または view-name に副表またはサブビューがない場合は、 OUTER を指定してもしなくても同じです。 table-name に副表がある場合、OUTER(table-name) からの中間結果表は、以下のように table-name から派生します。
- 列には、table-name の列に続いて、副表のそれぞれによって導入された追加列が組み込まれます (追加列がある場合)。 副表階層を深さ優先で全探索し、追加列は右側に追加されます。 共通の親を持つ副表の場合は、タイプの作成順に全探索します。
- 行には、table-name のすべての行、 およびその表の副表のすべての行が組み込まれます。 その行の副表にない列には、NULL が戻されます。
view-name にサブビューがある場合、OUTER(view-name) からの中間結果表は、以下のように view-name から派生します。
- 列には、view-name の列に続いて、サブビューのそれぞれによって導入された追加列が組み込まれます (追加列がある場合)。 サブビュー階層を深さ優先で全探索し、追加列は右側に追加されます。 共通の親を持つサブビューの場合は、タイプの作成順に全探索します。
- 行には、view-name のすべての行とそのサブビューのすべての行が組み込まれます。 その行のサブビューにない列には、NULL が戻されます。
OUTER を使用するときには、 table-name の副表または view-name のサブビューごとに、 SELECT 権限が必要です。
analyze_table-式- table-name | ビュー名
- table-name 変数または view-name 変数には、既存の表またはビューか、表参照を含む全選択の前に定義する共通表式の table-name を指定する必要があります。 ニックネームを指定できます。 ただし、インデータベース分析はローカル・データ用であるため、ニックネームのデータを別のデータ・ソースから取得する場合、 本来のパフォーマンス上の利点を活用できません。
- ANALYZE_TABLE
- インデータベース分析プロバイダー、名前付きモデル・インプリメンテーション、および入力データを使用して実行される特定のデータ・マイニング・モデルの結果を返します。 ANALYZE_TABLE パラメーターを参照する照会には、静的 SQL ステートメントおよびデータ定義言語 (DDL) ステートメントのいずれも使用できません。 入力値または出力値を以下のタイプにすることはできません。
- CHAR FOR BIT DATA または VARCHAR FOR BIT DATA
- BINARY または VARBINARY
- BLOB、CLOB、DBCLOB、または NCLOB
- BOOLEAN
- XML
- DB2SECURITYLABEL
- 実装 ' string '
- 式を評価する方法を指定します。 string パラメーターは、最大長が 1024 バイトのストリング定数です。 指定された値は、
インデータベース分析プロバイダーとのセッションを確立するために使用されます。 SAS をプロバイダーとして指定する場合、大/小文字を区別しない以下のパラメーターに値を指定する必要があります。
- PROVIDER
- 現在、サポートされているプロバイダー値は SAS のみです。
- ROUTINE_SOURCE_TABLE
- ROUTINE_SOURCE_NAME パラメーターに指定するアルゴリズムを実装するための DS2 コード (およびオプションで、
必要なフォーマットまたはメタデータ) が入っているユーザー表を指定します。 DS2 とは、SAS のプロシージャー型言語プロセッサーであり、データ・モデリング、ストアード・プロシージャー、
ならびにデータの抽出、変換、およびロード (ETL) 処理用に設計されています。
ルーチン・ソース表には定義済みの構造があり (
analyze_table-expression
セクションの最後にある例を参照)、パーティション・データベース環境では、カタログ・データベース・パーティション上になければなりません。 この表は、グローバル一時表であってはなりません。 特定の行の MODELDS2 列は空であってはならず、NULL 値を含めることもできません。 MODELFORMATS 列または MODELMETADATA 列の値が NULL でない場合、この値の長さは 0 より大きくなければなりません。 表スキーマ名を指定しない場合は、CURRENT SCHEMA 特殊レジスターの値が使用されます。 - ROUTINE_SOURCE_NAME
- 使用するアルゴリズムの名前を指定します。
表名、スキーマ名、またはアルゴリズム名が、小文字または大/小文字混合文字である場合は、以下の例に示すように区切り ID を指定します。IMPLEMENTATION 'PROVIDER=SAS; ROUTINE_SOURCE_TABLE=ETLIN.SOURCE_TABLE; ROUTINE_SOURCE_NAME=SCORING_FUN1;'IMPLEMENTATION 'PROVIDER=SAS; ROUTINE_SOURCE_TABLE="ETLin"."Source_Table"; ROUTINE_SOURCE_NAME="Scoring_Fun1";'
以下の例は、 ANALYZE_TABLE 式の使用方法を示しています。
SAS のツールは、スコアリング関数のモデル・インプリメンテーションを格納するための表を定義するときに役立ちます。 この表の各行には、DS2 で作成されたアルゴリズムが、必要な SAS フォーマット情報およびメタデータと一緒に格納されます。 MODELNAME 列は主キーとして機能します。 ROUTINE_SOURCE_NAME パラメーターの値は、ROUTINE_SOURCE_TABLE パラメーターで指定した表から最大で 1 行が取得されます。 以下に例を示します。
MODELNAME 列にはアルゴリズムの名前が入っています。 MODELDS2 列には、アルゴリズムを実装する DS2 ソース・コードが入っています。 MODELFORMATS 列には、アルゴリズムに必要な集約 SAS フォーマット定義が入っています。 アルゴリズムが SAS フォーマットを必要としない場合、この列にはヌル値が入っています。 MODELMETADATA 列には、アルゴリズムに必要な追加のメタデータが入っています。 アルゴリズムが追加のメタデータを必要としない場合、この列にはヌル値が入っています。 SAS EP インストーラーにより表が作成された場合は、他にも列がある可能性があります。CREATE TABLE ETLIN.SOURCE_TABLE ( MODELNAME VARCHAR(128) NOT NULL PRIMARY KEY, MODELDS2 BLOB(4M) NOT NULL, MODELFORMATS BLOB(4M), MODELMETADATA BLOB(4M) );- 以下では、表 T1 の列 C1 および C2 のデータを、スコアリング・モデル SCORING_FUN1 の入力データとして使用しています。また、このモデルのインプリメンテーションは、ETLIN.SOURCE_TABLE に格納されています。
WITH sas_score_in (c1,c2) AS (SELECT c1,c2 FROM t1) SELECT * FROM sas_score_in ANALYZE_TABLE( IMPLEMENTATION 'PROVIDER=SAS; ROUTINE_SOURCE_TABLE=ETLIN.SOURCE_TABLE; ROUTINE_SOURCE_NAME=SCORING_FUN1;'); - 以下では、表 T2 の全データを、スコアリング・モデル SCORING_FUN2 で使用しています。また、このモデルのインプリメンテーションは、ETLIN.SOURCE_TABLE に格納されています。
SELECT * FROM t2 ANALYZE_TABLE( IMPLEMENTATION 'PROVIDER=SAS; ROUTINE_SOURCE_TABLE=ETLIN.SOURCE_TABLE; ROUTINE_SOURCE_NAME=SCORING_FUN2;'); - 以下では、ビュー V1 の全データをスコアリング・モデル SCORING_FUN3 (このモデルの
インプリメンテーションは、ETLIN.SOURCE_TABLE に格納されています) で使用し、出力を一番目の出力列の昇順で返します。
SELECT * FROM v1 ANALYZE_TABLE( IMPLEMENTATION 'PROVIDER=SAS; ROUTINE_SOURCE_TABLE=ETLIN.SOURCE_TABLE; ROUTINE_SOURCE_NAME=SCORING_FUN3;') ORDER BY 1;
入れ子表式括弧内の全選択 (fullselect) は、ネストされた表式 と呼ばれます。 中間結果表はその全選択の結果です。 結果の列には固有の名前は必要ありませんが、固有の名前を持たない列は明示的に参照することができません。 LATERAL を指定した場合、ネストされた表の式の左に指定した表参照の結果列への相関参照を全選択に組み込むことができます。 ネストされた表の式がフェデレーテッド・データ・ソースのデータに関係している場合は、continue-handler を指定して、データ・ソースの特定のエラー状態を許容することができます。
全選択内にあるデータ変更ステートメントで参照されているか、 またはターゲットとされているネストされた表の式の選択リストにある式は、 以下が入っていない場合に限り、有効です。- SQL データの読み取りまたは変更を行う関数。
- 非決定性の関数
- 外部アクションを指定する関数
- OLAP 関数。
ビューが FROM 節のデータ変更ステートメントで直接参照される場合、またはそのステートメント内のネストされた表の式のターゲットとして参照される場合、ビューは以下の条件のいずれかを満たしている必要があります。- シンメトリックである (WITH CHECK OPTION が指定されている)
- WITH CHECK OPTION ビューの制限を満たす
FROM 節のデータ変更ステートメントのターゲットが、ネストされた表の式である場合は、以下の制約事項が適用されます。- 変更された行は再修飾されません。
- WHERE 節の述部は再評価されません。
- ORDER BY 操作および FETCH FIRST 操作は再実行されません。
ネストされた表の式は、以下の場合に使用できます。- ビューの代わりに使用して、 ビューが作成されないようにする場合 (ビューを一般的に使用する必要がない場合)
- 必要な中間結果表がホスト変数に基づく場合
データ変更表参照 (data-change-table-reference)data-change-table-reference 節は、中間結果表を指定します。 この表は、節に入っている検索済み UPDATE、検索済み DELETE、 または INSERT ステートメントで直接変更された行に基づいています。 data-change-table-reference は、select-statement、 SELECT INTO ステートメント、または共通表式で使用される外部全選択の FROM 節で、 唯一の table-reference として指定できます。 また、SET 変数ステートメントの唯一の全選択の唯一の表参照として data-change-table-reference を指定することもできます (SQLSTATE 428FL)。 データ変更ステートメントのターゲットになる表やビューは、 照会で参照される表やビューとして見なされるため、 照会の許可 ID には、ターゲットとなる表やビューでの SELECT 特権が必要になります。 data-change-table-reference 節は、ビュー定義、マテリアライズ照会表定義、あるいは FOR ステートメントで指定することはできません (SQLSTATE 428FL)。
UPDATE、DELETE、または INSERT ステートメントのターゲットを、共通表式で定義される一時ビューにすることはできません (SQLSTATE 42807)。また、ニックネームで定義される一時ビューにすることもできません (SQLSTATE 25000)。
table-reference のデータ変更ステートメントのターゲットとなるビューの選択リストまたは全選択にある式は、OLD TABLE が指定されているか式に以下のエレメントが含まれていない場合のみ選択できます (SQLSTATE 428G6)。- 副照会
- SQL データの読み取りまたは変更を行う関数。
- 非決定性または外部アクションを持つ関数
- OLAP 関数。
- NEXT VALUE FOR sequence 参照
- FINAL TABLE
- 中間結果表の行が SQL データ変更ステートメントによって変更された一連の行を表し、その状態がデータ変更ステートメントの完了時のものであることを指定します。 AFTER トリガーや参照制約があり、 その結果として SQL データ変更ステートメントのターゲットになっている表に対して追加の操作が発生する場合は、 エラーが戻されます (SQLSTATE 560C6)。 SQL データ変更ステートメントのターゲットが データ変更タイプの INSTEAD OF トリガーで定義されたビューであった場合は、 エラーが戻されます (SQLSTATE 428G3)。
- NEW TABLE
- 中間結果表の行が、SQL データ変更ステートメントによって変更された一連の行を表し、その状態が参照制約や AFTER トリガーの適用より前のものであることを指定します。 参照制約や AFTER トリガーに対する追加の処理のため、 ステートメントの完了時にターゲット表にあるデータは、中間結果表のデータと一致しないことがあります。
- OLD TABLE
- 中間結果表の行が、SQL データ変更ステートメントによって変更された一連の行を表し、その状態がデータ変更ステートメントの適用前に存在していたものであることを指定します。 (検索された更新ステートメント)
- 検索済み UPDATE ステートメントを指定します。 UPDATE ステートメントの WHERE 節や SET 節に、 UPDATE ステートメント外の列への相関参照を入れることはできません。 (検索/削除ステートメント)
- 検索済み DELETE ステートメントを指定します。 DELETE ステートメントの WHERE 節に、 DELETE ステートメント外の列への相関参照を入れることはできません。 (挿入ステートメント)
- INSERT ステートメントを指定します。 INSERT ステートメントの全選択内で、 INSERT ステートメントの全選択に入っていない列への相関参照を使用することはできません。
data-change-table-reference の中間結果表の内容は、 カーソルが開かれたときに決定されます。 中間結果表には、指定されたターゲット表またはビューのすべての列を含め、 処理されたすべての行が示されます。 SQL データ変更ステートメントのターゲット表またはビューのすべての列は、 ターゲット表またはビューから列名を使用してアクセスできます。 データ変更ステートメントで INCLUDE 節が指定されている場合、 中間結果表には、これらの追加の列が示されます。
表関数参照 (table-function-reference)- 一般的に、表関数とその引数値は、 表やビューとまったく同じ方法で SELECT の FROM 節で参照することができます。 表参照として指定された各 function-name (関数名) およびその引数のタイプは、 アプリケーション・サーバーの既存の表関数に解決されなければなりません。 ただし、特殊な考慮事項が適用されます。
- 表関数の列名: correlation-name の後に代替列名を指定しなければ、表関数の列名は、CREATE FUNCTION ステートメントの RETURNS または RETURNS GENERIC TABLE 節で指定された列名になります。 これは、 CREATE TABLE ステートメントに定義されている表の列名に類似したものです。
- 表関数の解決: 表関数参照で関数名と共に指定される引数は、関数解決 と呼ばれるアルゴリズムが実際に使用する関数を判別するのに使われます。 これは、ステートメントで使用される他の関数 (例えば、 スカラー関数) の場合に行われるのと同じです。
- 表関数の引数: スカラー関数の引数と同様に、表関数の引数には通常、任意の有効な SQL 式を使用できます。 次の例は正しい構文です。
Example 1: SELECT c1 FROM TABLE( tf1('Zachary') ) AS z WHERE c2 = 'FLORIDA'; Example 2: SELECT c1 FROM TABLE( tf2 (:hostvar1, CURRENT DATE) ) AS z; Example 3: SELECT c1 FROM t WHERE c2 IN (SELECT c3 FROM TABLE( tf5(t.c4) ) AS z -- correlated reference ) -- to previous FROM clauseExample 4: SELECT c1 FROM TABLE( tf6('abcd') ) -- tf6 is a generic AS z (c1 int, c2 varchar(100)) -- java table function - SQL データを変更する表関数: MODIFIES SQL DATA オプションを含めて指定された表関数は、SET ステートメントの副選択、SELECT INTO、または row-fullselect である select-statement、common-table-expression、または RETURN ステートメントで、最後の表参照としてのみ使用できます。 1 つの FROM 節中で使用できる表関数は 1 つだけであり、
表関数の引数は、副選択内の他のすべての表参照と相関していなければなりません (SQLSTATE 429BL)。 以下の例は、MODIFIES SQL DATA プロパティーをもった表関数の有効な構文です。
Example 1: SELECT c1 FROM TABLE( tfmod('Jones') ) AS z Example 2: SELECT c1 FROM t1, t2, TABLE( tfmod(t1.c1, t2.c1) ) AS z Example 3: SET var = (SELECT c1 FROM TABLE( tfmod('Jones') ) AS z Example 4: RETURN SELECT c1 FROM TABLE( tfmod('Jones') ) AS z Example 5: WITH v1(c1) AS (SELECT c1 FROM TABLE( tfmod(:hostvar1) ) AS z) SELECT c1 FROM v1, t1 WHERE v1.c1 = t1.c1Example 6: SELECT z.* FROM t1, t2, TABLE( tfmod(t1.c1, t2.c1) ) AS z (col1 int)
コレクション派生テーブル collection-derived-table を使用して、配列のエレメントを別々の行の列の値に変換できます。 WITH ORDINALITY を指定すると、INTEGER データ・タイプの追加の列が付加されます。 この列には、配列のエレメントの部分が入ります。 列は、correlation-clause 内で指定された列の名前を使用することにより、選択リストの中および残りの副選択で参照することができます。 collection-derived-table 節は、配列がサポートされるコンテキスト内のみで使用できます (SQLSTATE 42887)。 詳しくは、『UNNEST 表関数』を参照してください。
xmltable 式- xmltable-expression は、中間結果表を決定する組み込み XMLTABLE 関数の呼び出しを指定します。 詳しくは、XMLTABLE を参照してください。 外部表参照 (external-table-reference)
- データベースの外部にある区切り文字で区切られているテキスト・ファイル、または区切り文字で区切られていないテキスト・ファイルに外部表が入っています。 external-table-reference で、外部表が入っているファイルの名前を指定します。重要: 一時外部表参照をビュー定義に指定することはできません (SQLSTATE 428IE)。列定義
- 列の属性。
- column-name
- 表を構成する列の名前を指定します。 名前を修飾したり、表の複数の列に対して同じ名前を使用したりすることはできません (SQLSTATE 42711)。 組み込みタイプ (built-in-type)
- 以下の組み込みデータ・タイプのいずれか。
- SMALLINT
- 短精度整数。
- [整数 | int]
- 長精度整数。
- BIGINT
- 64 ビット整数。
- [DECIMAL | DEC | NUMERIC | NUM] (precision-integer、 scale-integer)
- 10 進数。
- precision integer は、総桁数を指定します。 1 から 31 の範囲内でなければなりません。 デフォルトは 5 です。
- scale integer は、小数点以下の桁数を指定します。 負にすることも、precision より大きくすることもできません。 デフォルトは 0 です。
- FLOAT (整数)
- 単精度または倍精度の浮動小数点数。 指定の長さの範囲に応じて次のように処理されます。
- 1 から 24 の場合、数値で単精度が使用されます。
- 25 から 53 の場合、数値で倍精度が使用されます。
FLOAT の代わりに次を指定できます。- REAL
- 単精度浮動小数点数。
- DOUBLE
- 倍精度浮動小数点数。
- DOUBLE PRECISION
- 倍精度浮動小数点数。
- FLOAT
- 倍精度浮動小数点数。
- DECFLOAT(精度-整数)
- 10 進浮動小数点数。 precision integer は総桁数 (16 または 34) を指定します。 デフォルトは 34 です。
- [CHARACTER | CHAR] (整数 [OCTETS | CODEUNITS32])
- 指定したコード単位数の固定長文字ストリング。 この数は 1 から 255 (OCTETS) または 1 から 63 (CODEUNITS32) の範囲にすることができます。 デフォルトは 1 です。
- [VARCHAR | CHARACTER VARYING | CHAR VARYING] (integer [OCTETS | CODEUNITS32])
- 指定したコード単位数の最大長の、可変長文字ストリング。 この数は 1 から 32672 (OCTETS) または 1 から 8168 (CODEUNITS32) の範囲にすることができます。
- FOR BIT DATA
- 列の内容をビット (バイナリー) データとして扱うように指定します。 他のシステムとのデータ交換の過程で、 コード・ページ変換は行われません。 比較は、データベース照合シーケンスに関係なくバイナリーで行われます。
- [CLOB | CHARACTER LARGE OBJECT | CHAR LARGE OBJECT] (integer [K] [OCTETS | CODEUNITS32])
- 指定したコード単位数の最大長の、文字ラージ・オブジェクト・ストリング。 デフォルトの最大長は 65,535 バイトです。長さの整数に 1024 を乗算する場合は、 K (kilo) 乗数を指定します。
- K 乗数を使用するかどうかに関係なく、結果の長さは、外部表の CLOB 列の最大長 (65,535 OCTETS、32,767 CODEUNITS16、または 16,383 CODEUNITS32) によって制限されます。 64K OCTETS と 16K CODEUNITS32 は、最大長をそれぞれ 1 超えているため、許可されないことに注意してください。
- データ・タイプと長さ指定の間、または長さ整数と K 乗数の間には、任意の数のスペース (ゼロ・スペースを含む) を使用できます。 例えば、以下の指定内容はすべて同等であり、有効です。
CLOB(50K) CLOB(50 K) CLOB (50 K) - K 乗数は、大文字でも小文字でも指定できます。
Unicode データベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は、NLS_STRING_UNITS グローバル変数または string_units データベース構成パラメーターの値によって決定されます。 Unicode 以外のデータベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は OCTETS です。
- OCTETS
- 長さ属性の単位がバイトであることを指定します。
- CODEUNITS32
- 長さ属性の単位が Unicode UTF-32 コード単位であることを指定します。このコード単位は、文字数でのカウント数に近似します。 これは、データ・タイプの基となるコード・ページには影響を与えません。 データ値の実際の長さは、データが UTF-32 に変換されたかのように UTF-32 コード単位をカウントすることで決定されます。 CODEUNITS32 は、Unicode データベースでのみ指定できます (SQLSTATE 560AA)。
- GRAPHIC (整数 [CODEUNITS16 | CODEUNITS32])
- 指定の長さの固定長 GRAPHIC ストリング。1 から 127 の 2 バイト、1 から 127 の CODEUNITS16、または 1 から 63 の CODEUNITS32 の範囲で指定できます。 デフォルト長は 1 です。
- VARGRAPHIC (整数 [CODEUNITS16 | CODEUNITS32])
- 指定の最大長の、可変長 GRAPHIC ストリング。1 から 16336 の 2 バイト、1 から 16336 の CODEUNITS16、または 1 から 8168 の CODEUNITS32 の範囲で指定できます。
- DBCLOB (整数 [K] [CODEUNITS16 | CODEUNITS32])
- 文字ラージ・オブジェクト・ストリング (最大長を 2 バイト、Unicode UTF-16 コード単位、または Unicode UTF-32 コード単位で指定)。 デフォルトの最大長は 2 バイトの 32,767 です。長さの整数に 1024 を乗算する場合は、 K (kilo) 乗数を指定します。
- K 乗数を使用するかどうかに関係なく、結果の長さは、外部表の DBCLOB 列の最大長 (32,767 CODEUNITS16 または 16,383 CODEUNITS32) によって制限されます。 32K CODEUNITS16 と 16K CODEUNITS32 は、最大長をそれぞれ 1 超えているため、許可されないことに注意してください。
- データ・タイプと長さ指定の間、または長さ整数と K 乗数の間には、任意の数のスペース (ゼロ・スペースを含む) を使用できます。 例えば、以下の指定内容はすべて同等であり、有効です。
DBCLOB(50K) DBCLOB(50 K) DBCLOB (50 K) - K 乗数は、大文字でも小文字でも指定できます。
Unicode データベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は、NLS_STRING_UNITS グローバル変数または string_units データベース構成パラメーターの値によって決定されます。 Unicode 以外のデータベースでは、文字ストリング・データ・タイプのデフォルトのストリング単位は CODEUNITS16 です。
- CODEUNITS16
- 長さ属性の単位が Unicode UTF-16 コード単位であることを指定します。このコード単位は、2 バイトでのカウント数と同じです。 CODEUNITS16 は、Unicode データベースでのみ指定できます (SQLSTATE 560AA)。
- CODEUNITS32
- 長さ属性の単位が Unicode UTF-32 コード単位であることを指定します。 これは、データ・タイプの基となるコード・ページには影響を与えません。 データ値の実際の長さは、データが UTF-32 に変換されたかのように UTF-32 コード単位をカウントすることで決定されます。 CODEUNITS32 は、Unicode データベースでのみ指定できます (SQLSTATE 560AA)。
- [NATIONAL CHARACTER | NATIONAL CHAR | NCHAR] (整数)
- 指定の長さの固定長ストリング。 デフォルト長は 1 です。
NATIONAL CHARACTER タイプは、ストリング単位も定義する nchar_mapping データベース構成パラメーターの値に基づいて、固定長文字ストリングまたは固定長 GRAPHIC ストリングのいずれかにマップされます。
- [NATIONAL CHARACTER VARYING | NATIONAL CHAR VARYING | NCHAR VARYING | NVARCHAR] (整数)
- 指定の最大長の可変長ストリング。
NATIONAL CHARACTER VARYING タイプは、ストリング単位も定義する nchar_mapping データベース構成パラメーターの値に応じて、可変長文字ストリングまたは可変長 GRAPHIC ストリングのいずれかにマップされます。
- [NATIONAL CHARACTER LARGE OBJECT | NCHAR LARGE OBJECT | NCLOB] (integer [K])
- ラージ・オブジェクト・ストリング (最大長を指定)。 デフォルトの最大長は 2 バイトの 16,383 です。
このデータ・タイプは、ストリング単位も定義する nchar_mapping データベース構成パラメーターの現行値に応じて、文字ラージ・オブジェクト (CLOB) または 2 バイト文字ラージ・オブジェクト (DBCLOB) のいずれかにマップされます。 長さの整数に指定できる値、および K (キロ) 乗数の使用方法については、CLOB パラメーターまたは DBCLOB パラメーター (いずれか該当する方) の説明を参照してください。
- BINARY (整数)
- 指定の長さの固定長バイナリー・ストリング。1 から 255 バイトの範囲でなければなりません。 デフォルト長は 1 です。
- [VARBINARY | BINARY VARYING] (整数)
- 指定した最大長の可変長バイナリー・ストリング。1 から 32672 バイトの範囲でなければなりません。
- [BLOB | BINARY LARGE OBJECT] (integer [K])
- 指定したコード単位数の最大長の、バイナリー・ラージ・オブジェクト・ストリング。 デフォルトの最大長は 65,535 バイトです。長さの整数に 1024 を乗算する場合は、 K (kilo) 乗数を指定します。
- K 乗数を使用するかどうかに関係なく、結果の長さは、外部表の BLOB 列の最大長 (65,535 バイト) によって制限されます。 64K は最大長を 1 超えているため、許可されないことに注意してください。
- データ・タイプと長さ指定の間、または長さ整数と K 乗数の間には、任意の数のスペース (ゼロ・スペースを含む) を使用できます。 例えば、以下の指定内容はすべて同等であり、有効です。
BLOB(50K) BLOB(50 K) BLOB (50 K) - K 乗数は、大文字でも小文字でも指定できます。
- 日付
- 日付。
- 時刻
- ある時だ。
- TIMESTAMP(integer) または TIMESTAMP
- タイム・スタンプ。 この整数は、秒未満の小数点以下の桁数を 0 (秒) から 12 (ピコ秒) で指定します。 デフォルトは 6 (マイクロ秒) です。
- BOOLEAN
- ブール値。
- LIKE table-name1 または view-name または nickname
- 表の列の名前と記述が、指定された表 (table-name1)、ビュー (view-name)、またはニックネーム (nickname) の列と同じであることを指定します。 指定された表、ビュー、またはニックネームは、カタログ内にあるか、宣言済み一時表でなければなりません。 型付き表または型付きビューを指定することはできません (SQLSTATE 428EC)。LIKE を使用すると、n 列が暗黙的に定義されます。n は、 指定した表、ビューまたはニックネームにおける列数です (指定した表では暗黙的な隠し列を含む)。 既存の表の暗黙的な隠し列に対応する新規表の列も、暗黙的な隠し列と定義されます。 暗黙的な定義は、以下に示すように LIKE の後に何が指定されるかによって左右されます。
- 表が指定されると、暗黙的な定義には、その表のそれぞれの列の列名、データ・タイプ、非表示属性、および NULL 可能特性が設定されます。 EXCLUDING COLUMN DEFAULTS を指定しないと、列のデフォルト値も入ります。
- ビューが指定されると、暗黙的な定義には、そのビューに定義した全選択のそれぞれの結果列の列名、データ・タイプ、および NULL 可能特性が設定されます。 ビュー列のデータ・タイプは、表の列に対して有効なデータ・タイプである必要があります。
- ニックネームが指定されると、暗黙的な定義には、そのニックネームのそれぞれの列の列名、データ・タイプ、および NULL 可能特性が設定されます。
- 保護対象表を指定すると、新しい表は、その指定した表と同じセキュリティー・ポリシーと保護対象列を継承します。
- 表が指定されていて、その表に行開始列、行終了列、またはトランザクション開始 ID 列が含まれている場合、新しい表の対応する列はソース列のデータ・タイプのみを継承します。 新規列は生成列とは見なされません。
- 期間が含まれる表が指定されると、新しい表は期間定義を継承しません。
- システム期間テンポラル表が指定される場合、新しい表はシステム期間テンポラル表ではありません。
- random by generation 方式を使用するランダム分散表が指定され、作成される新しい表が同じ表分散を共有しない場合、ランダム分散値の生成に使用される RANDOM_DISTRIBUTION_KEY列は含まれません。
copy-attributes 節に基づいて、列のデフォルトと ID 列属性を組み込んだり除外したりすることができます。 さらにこの暗黙的な定義には、指定した表、ビュー、またはニックネームの他の属性は含まれません。 したがって、新しい表には、主キー、ユニーク制約、外部キー制約、参照整合性制約、トリガー、索引、ORGANIZE BY 指定、PARTITIONING KEY 指定はいずれもありません。 表は IN 節で暗黙的にまたは明示的に指定した表スペースの中に作成されます。 また、任意指定の他の節を指定した場合に限り、この表にその任意指定の節が含まれます。
表が LIKE 節内で定義されていて、その表に ROW CHANGE TIMESTAMP 列が含まれている場合、新規表の対応する列は ROW CHANGE TIMESTAMP 列のデータ・タイプのみを継承します。 新規列は生成列とは見なされません。
表が指定される場合、その表の行レベルまたは列レベルのアクセス制御がアクティブになると、これは新しい表で継承されません。
- オプション
- 以下のオプションは、外部表ファイルへのデータのロード、または外部表ファイルからのデータの取得を制御します。 各オプションの値はテキスト・ストリングであり、大/小文字の区別はありません。
- BINARYNUMERICS
- ASCII 文字表現ではなく、2 進形式で数値データを入力することを指定します。 他の非数値データには影響しません。 テキスト形式の固定長形式データでのみサポートされます。
- TRUE または ON
数値データ (DECIMAL タイプを除く) は、2 進形式で入力する必要があります。
サポートされる数値タイプは、SMALLINT、INT、BIGINT、REAL、および DOUBLE です。 整数型 (SMALLINT、INT、および BIGINT) 間で行われる変換を除き、データ型間の変換は行われません。
データ長は、ターゲット列の定義と一致する必要があります (ただし、整数変換は例外です。例えば、2、4、および 8 バイトは、すべて BIGINT 列の有効なゾーン長です)。
データ・ファイル内のすべての数値入力は、ロード操作が実行されているプラットフォームに関係なく、ビッグ・エンディアンであると見なされます。
REAL および DOUBLE 値は IEEE 浮動小数点形式でなければなりません。
- FALSE または OFF
- 数値データは、標準 ASCII 文字表現で入力する必要があります。
- BOOLSTYLE または BOOLEAN_STYLE
- ロード操作時には、すべてのブール値で同じスタイルが使用されている必要があります。 次のオプションは、使用するブール・スタイルを指定します。
- 1_0 (これはデフォルト値です)
- T_F
- Y_N
- YES_NO
- TRUE_FALSE
- CARDINALITY
- 戻されると予想される行数の見積もりをオーバーライドするゼロ以外の正整数の値。
- CCSID
- 入力データ・ファイルのコード化文字セット ID (CCSID)。 この値には CCSID 仕様からの任意の有効な整数値を指定できます。 デフォルト値はありません。 ENCODING オプションの値が UTF8、 LATIN9、または INTERNAL の場合、CCSID オプションと ENCODING オプションは相互に排他的です。日時に使用されるスタイルは、CCSID が指定されているかどうかによって異なります。
- CCSID が指定されていて、DATESTYLE、TIMESTYLE、DATEDELIM、および TIMEDELIM が指定されていない場合、DATE_FORMAT、TIME_FORMAT、および TIMESTAMP_FORMAT の値またはデフォルトが使用されます。
- CCSID が指定されておらず、TIMESTAMP_FORMAT、DATE_FORMAT、および TIME_FORMAT が指定されていない場合、DATESTYLE、TIMESTYLE、DATEDELIM、および TIMEDELIM の値またはデフォルト値が使用されます。
- COMPRESS
- ロード操作またはアンロード操作の場合に、データ・ファイルのデータが圧縮されるかどうか。
- GZIP
- データ・ファイルのデータは、GZIP 圧縮アルゴリズムを使用して圧縮されます。
- いいえ
- データ・ファイルのデータは圧縮されません。 これがデフォルトです。
- LZ4
- データ・ファイルのデータは、LZ4 圧縮アルゴリズムを使用して圧縮されます。
- CRINSTRING
- エスケープされていない復帰 (CR) 文字または復帰改行 (CRLF) 文字を解釈する方法:
- TRUE または ON
- エスケープされていない CR 文字は、レコード区切り文字ではなくデータとして解釈されます。
- FALSE または OFF
- エスケープされていない CR は、レコード区切り文字として解釈されます。 これがデフォルトです。
- CTRLCHARS
- CHAR または VARCHAR フィールドで、ASCII 値の 1 から 31 を許可するかどうか。 NULL 文字、CR 文字、および LF 文字はエスケープする必要があります。 指定可能な値は以下のとおりです。
- TRUE または ON
- CHAR または VARCHAR フィールドで ASCII 値の 1 から 31 を使用できます。
- FALSE または OFF
- CHAR または VARCHAR フィールドで ASCII 値の 1 から 31 を使用できません。 これがデフォルトです。
- DATAOBJECT または FILE_NAME
- 作成する外部表が格納されるファイル (またはファイルとして扱うことができる任意のメディア) の完全修飾名。 このオプションは、表名の直後にファイルの名前が指定されていない場合は必須です。指定されている場合は、使用できません。
REMOTESOURCE オプションが LOCAL (デフォルト値) に設定され、 extbl_strict_io 構成パラメーターが NO に設定されている場合、外部表ファイルへのパスは絶対パスであり、 extbl_location 構成パラメーターで指定されたパスの 1 つでなければなりません。 それ以外の場合、外部表ファイルへのパスは、表定義者の許可 ID が後に続く extbl_location 構成パラメーターで指定されたパスに対する相対パスです。 例えば、 extbl_location が
/home/xyzに設定され、表定義者の許可 ID がuser1である場合、外部表ファイルへのパスは/home/xyz/user1/に対する相対パスになります。ファイル名は有効な UTF-8 ストリングでなければなりません。
ロード操作の場合は、以下の条件が適用されます。- 対象のファイルが既に存在していなければなりません。
- 必要な権限:
- 外部表が名前付き外部表である場合、所有者にそのファイルに対する読み取り権限と LOGDIR ディレクトリーに対する書き込み権限が必要です。
- 外部表が一時外部表である場合、ステートメントの許可 ID にそのファイルに対する読み取り権限と LOGDIR ディレクトリーに対する書き込み権限が必要です。
- 対象のファイルが存在する場合は上書きされます。
- 必要な権限:
- 外部表が名前付き外部表である場合、所有者にこのファイルのディレクトリーに対する読み取り権限と書き込み権限が必要です。
- 外部表が一時外部表である場合、ステートメントの許可 ID にこのファイルのディレクトリーに対する読み取り権限と書き込み権限が必要です。
- DATEDELIM
- DATESTYLE オプションで指定された形式に従って、日付のコンポーネントを区切る区切り文字。 空ストリングを指定する場合、日付コンポーネント間に区切り文字はありません。また、日と月は 2 桁の数値として指定する必要があります。 DATESTYLE が MONDY または MONDY2 に設定されている場合、デフォルトの DATEDELIM 値はスペースです。 TIMESTAMP_FORMAT オプションと DATEDELIM オプションは相互に排他的です。
- DATESTYLE
- 日付フォーマットの解釈方法。 1 から 9 の範囲の日または月の場合、1 桁、2 桁、またはスペースとその後に続く単一の桁を使用します。 DATEDELIM オプションがスペースの場合、日付の後にコンマを指定できます。 次の場合には、エラーが生じます。
- 日、月、または年にゼロを指定する
- 存在しない日付を指定する (例えば、8 月 32 日や 2 月 30 日など)。
表 1. DateStyle オプションに指定できる値。 次の例は、DATEDELIM が「-」に設定されている場合に、2014 年 3 月 21 日という日付がどのように表されるかを示しています。 値 説明 例 YMD 年 (4 桁)、月 (2 桁)、日 (2 桁)。 これがデフォルトです。 2014-03-21 DMY 日 (2 桁)、月 (2 桁)、年 (4 桁)。 21-03-2014 MDY 月 (2 桁)、日 (2 桁)、年 (4 桁)。 03-21-2014 MONDY 月 (3 文字)、日 (2 桁)、年 (4 桁)。 Mar 21 2014 DMONY 日 (2 桁)、月 (3 文字)、年 (4 桁)。 21-Mar-2014 Y2MD 年 (2 桁)、月 (2 桁)、日 (2 桁)。 アンロードではサポートされません。 14-03-21 DMY2 日 (2 桁)、月 (2 桁)、年 (2 桁)。 アンロードではサポートされません。 21-03-14 MDY2 月 (2 桁)、日 (2 桁)、年 (2 桁)。 アンロードではサポートされません。 03-21-14 MONDY2 月 (3 文字)、日 (2 桁)、年 (2 桁)。 アンロードではサポートされません。 Mar 21 14 DMONY2 日 (2 桁)、月 (3 文字)、年 (2 桁)。 アンロードではサポートされません。 21-Mar-14 - DATETIMEDELIM
- TIMESTAMP データ・タイプの日付構成要素と時刻構成要素を区切る 1 バイト文字。
- DATE_FORMAT
- データ・ファイルの日付フィールドの形式。 値は、 TIMESTAMP_FORMAT スカラー関数で受け入れられる任意の日付形式ストリングにすることができます。 デフォルトは YYYY-MM-DD です。 DATE_FORMAT オプションと DATEDELIM オプションまたは DATESTYLE オプションは相互に排他的です。
- DECIMALDELIM または DECIMAL_CHARACTER
- データ・タイプ FLOAT、DOUBLE、TIME、および TIMESTAMP の小数点区切り文字。 許可される値は、
','および'.'です。 - DECPLUSBLANK
- アンロード操作時に正の 10 進値を表す方法を指定します。
- DELIMITER または COLUMN_DELIMITER
- 入力レコードまたは出力レコードのフィールドを区切るために使用する文字。 デフォルトは垂直バー (
'|') です。以下のいずれかの方法で、7 ビットの ASCII 範囲内の文字 (10 進値 1 ‑ 127) を指定できます。- 単一文字として (例えば、
DELIMITER ';') - 対応する ASCII 10 進値 (例えば、
DELIMITER 59またはDELIMITER '59') を指定する。 - 対応する ASCII 16 進値を指定する (例えば、
DELIMITER x'3B')。
10 進値の範囲 128 から 255 は、対応する ASCII 10 進値または 16 進値を指定することにより、ISO 文字セットの入力ファイルでのみサポートされます。 入力ファイルが UTF8 文字セットの場合、この区切り値の範囲はサポートされません。
- 単一文字として (例えば、
- ENCODING
- ファイル内のデータのタイプ。
- UTF8
- ファイルは、 すべての文字データに UTF8 エンコードを使用します。
- LATIN9
- ファイルは、 すべての文字データに LATIN9 エンコードを使用します。
- INTERNAL
- ファイルは UTF8 と LATIN9 の両方のエンコードを混合して使用しているか、使用されているエンコードのタイプが不明です。 システムではデータを検査し、必要に応じてデータをエンコードします。 このデータ検査によって全体的なパフォーマンスが低下するため、この値は必要な場合にのみ使用してください。 これがデフォルトです。
- INTERNAL
- これはデフォルト・オプションです。
- DBCS_GRAPHIC
- この値は、ロード操作に限り使用できます。アンロード操作には使用できません。 この値を指定する場合は、CCSID オプションも指定する必要があります。 ロード操作時に、GRAPHIC または VARGRAPHIC タイプのフィールドは、指定された CCSID の 2 バイト文字セットを使用してエンコードされます。その他すべてのタイプのフィールドは、指定された CCSID の混合バイト文字セットを使用してエンコードされます。注: EXPORT ユーティリティーによって作成された DEL ファイルは単一の文字セットを使用してエンコードされるため、ENCODING を DBCS_GRAPHIC に設定することはできません。
- ESCAPECHAR または ESCAPE_CHARACTER
- エスケープ文字として認識される文字。 エスケープ文字は、それに続く文字 (それ以外の場合はフィールド区切り文字または行の終わりシーケンス文字として扱われる) が、代わりにフィールド内の値の一部として扱われることを示します。 GRAPHIC ストリング・データの場合、エスケープ文字は無視されます。 デフォルトはありません。
- FILLRECORD
- ロード操作の場合、レコードのフィールドは、左から右にターゲット表の列にロードされます。 このオプションは、入力レコードに含まれているフィールドの数を、ターゲット表に定義されている列の数より少なくすることができるかどうかを示します。
- TRUE または ON
- 値が欠落しているすべての列が NULL 可能である場合、入力行には少ない数のフィールドを含めることができます。 欠落している値は NULL に設定されます。 値が欠落している 1 つ以上の列が NULL 可能でない場合、レコードはリジェクトされます。
- FALSE または OFF
- 含まれている列の数が少ない入力行はリジェクトされます。 これがデフォルトです。
- FORMAT または FILE_FORMAT
- ソース・ファイルのデータ・フォーマット:
- テキスト
- ロードまたはアンロードされるデータはテキスト区切り形式です。 これがデフォルトです。
- INTERNAL
- データは Netezza Platform Software (NPS) で使用される内部フォーマットです。 この値は、ファイルからデータベースにデータをロードする際に限り有効です。データをファイルにアンロードする際には無効です。 FORMAT オプションでこの値を指定する場合は、以下のオプションも指定しなければならず、その他のオプションは指定できません。
- DATAOBJECT または FILE_NAME。
- REMOTESOURCE、SWIFT、または S3。 REMOTESOURCE オプションを指定する場合は、値は LOCAL または YES でなければなりません。
- COMPRESS。 これは GZIP に設定する必要があります。
- BINARY
- データは Db2 で使用される内部フォーマットです。
- FIXED
- データは固定長形式です。
- IGNOREZERO または TRIM_NULLS
- CHARフィールドとVARCHARフィールドのバイナリ値ゼロを破棄するかどうかを指定する。
- TRUE または ON
- バイト値ゼロは無視される。
- FALSE または OFF
- バイト値ゼロは無視されません。 これがデフォルトです。
- KEEP
- バイナリー値ゼロは受け入れられ、入力フィールドの一部として使用できます。
- INCLUDEHEADER または COLUMN_NAMES
- アンロード操作の場合に、表の列名が外部表ファイルのヘッダーとして組み込まれるかどうか。
- TRUE または ON
- 表の列名がヘッダーとして組み込まれます。
- FALSE または OFF
- 表の列名はヘッダーとして組み込まれません。 これがデフォルトです。
- INCLUDEZEROSECONDS
- アンロード操作の場合に、秒の値が使用不可の場合に秒の値として 00 を指定するかどうか。
- TRUE または ON
- 秒を示す値として 00 を指定します。
- FALSE または OFF
- 秒の値は指定しないでください。 これがデフォルトです。
- ロード操作の場合に、隠し列の値がデータ・ファイル内に存在するかどうかを指定します。
- LFINSTRING
- ストリング・データ内のエスケープされていない改行 (LF または改行と呼ばれることもある) 文字を解釈する方法を指定します。
- TRUE または ON
- エスケープされていない LF 文字は、レコードの最後のフィールドにある場合にのみレコード区切り文字として解釈されます。それ以外の場合はデータとして扱われます。 レコードの最後のフィールドにある LF 文字をデータとして処理するには、そのフィールドの値を単一引用符または二重引用符で囲みます。
- FALSE または OFF
- エスケープされていない LF 文字は、その位置に関係なく、レコード区切り文字として解釈されます。 これがデフォルトです。
このオプションは、アンロード操作ではサポートされません。
注意このSQL互換性の強化は Db2 バージョン 11.5 Mod Pack 2 およびそれ以降のバージョンでのみ利用可能です。 - LOGDIR または ERROR_LOG
- 以下のファイルの書き込み先ディレクトリー。
- <database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.bad
- 拒否されたレコード (処理できなかったレコード) を含むファイル。
- <database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.log
- ログ・ファイル。
<file-name>で示されます) は、最大値を超えないように切り捨てられます。パーティションに対する操作を実行中に .log ファイルまたは .bad ファイルが生成される場合、生成されたファイルの名前の末尾に、ピリオドに続いて 3 桁のパーティション番号が付加されます。
- MAXERRORS または MAX_ERRORS
- ロード操作の場合に、システムが処理を停止し、即時にロードをロールバックする、リジェクトされたレコード数のしきい値。 デフォルトは 1 (つまり、1 つのレコードがリジェクトされるとロールバックが行われます) です。
- MULTIPARTSIZEMB
DB2_ENABLE_COS_SDK レジストリー変数を ON に設定すると、 Db2 がオブジェクト/ファイルを複数パーツでクラウド・オブジェクト・ストレージにストリーミングできるようにする組み込みベンダー COS SDK を介して、クラウド・オブジェクト・ストレージとの Db2 リモート・ストレージ 通信が容易になります (「マルチパート・アップロード」とも呼ばれます)。 このパラメーターは、アンロードされるファイルのマルチパート・アップロードのパート・サイズをメガバイト (MB) 単位で指定し、 MULTIPARTSIZEMB dbm config パラメーターで指定された値をオーバーライドします。 このオプションは、バージョン 11.5 モディフィケーションパック 7 以降、 Linux (x86) 環境でのみ使用できます。
- MAXROWS または MAX_ROWS
- 正整数に設定されている場合、このオプションは処理される外部表のレコード (行) の最大数を指定します。 0 (デフォルト) に設定されている場合、制限はなく、すべての行が処理されます。 ロード操作中に、MAXROWS が正の値に設定されている場合、その数の行が処理されると、リジェクトまたはスキップされた行があるかどうかに関係なく、システムはロード操作を終了し、挿入されたレコードをすべてコミットします。
- MERIDIANDELIM
- 区切り文字ありおよび区切り文字なしの 12 時間形式の時刻値の AM トークンまたは PM トークンと秒部分を分離する 1 バイト文字。
- NOLOG
- 外部表の .log ファイルを作成するかどうかを指定します。
- NULLVALUE または NULL_VALUE
- NULL 値を示すために使用される最大 4 バイトの UTF-8 ストリング。 デフォルトは
'NULL'です。 - PARTITION
- Database Partitioning Feature (DPF) がデータベースに対して有効になっている場合、1 つの外部表を複数のファイルにパーティション化することができます。 外部表を構成する各データ・ファイルの名前には、ピリオドとそれに続く 3 桁の数字 (パーティション番号を示す 000 から 999 までの数字) が接尾部として付加されます。 例えば、dataFile.txt という名前の外部表が 3 つのパーティションに分割されている場合、外部表を構成する各ファイルには、それぞれ dataFile.txt.000、dataFile.txt.001、dataFile.txt.002 という名前が付けられます。 これらのファイルはすべてのメンバーからアクセス可能でなければなりません。パーティション化された外部表では、PARTITION オプションにより、ステートメントが適用されるパーティション (複数可) が指定されます。
- PARTITION ALL
- ステートメントは、外部表を構成するすべてのパーティションに適用されます。 アンロード操作の場合、この値のみ許可されています。
- 区画 (n から n)
- ステートメントは、指定された範囲のすべてのパーティションに適用されます。例: PARTITION (54 TO 62)。
- PARTITION (n、n、...)
- ステートメントは、指定されたパーティション (複数可) にのみ適用されます。例: PARTITION (53) または PARTITION (51,57,58)。 複数のパーティション番号を指定する場合、昇順で指定する必要があり (SQLSTATE=42615 の sqlcode SQL0263N)、重複することはできません (SQLSTATE=42615 の sqlcode SQL0265N)。
パーティション化された外部表に対する操作を実行中に .log ファイルまたは .bad ファイルが生成される場合、生成されたファイルの名前の末尾に、ピリオドに続いて 3 桁のパーティション番号が付加されます。
DPF が使用可能で、PARTITION オプションが指定されていない場合、外部表はコーディネーター・メンバー上の単一パーティション表として扱われます。 外部表ファイル、.log ファイル、.bad ファイルの名前にパーティション番号の接尾部は付けられません。
DPF が使用可能になっていない場合は、PARTITION オプションを指定できますが、指定できるのは値 ALL、(0 から 0)、または (0) (SQL0644N) のみです。 何の影響も及ぼしません。
REMOTESOURCE オプションと PARTITION オプションは相互に排他的です。
- QUOTEDNULL
- ロード操作の場合、単一引用符または二重引用符で囲まれ、NULLVALUE または NULL_VALUE オプションで指定された NULL 値と一致する値 (例えば、 "NULL" や 'NULL') を解釈する方法。
- TRUE または ON
- 値は NULL 値として解釈されます。 これがデフォルトです。
- FALSE または OFF
- 値は文字ストリングとして解釈されます。
- QUOTEDVALUE または STRING_DELIMITER
- データ値を引用符で囲むかどうか。
- SINGLE または YES
- データ値は単一引用符 (') で囲まれます。
- DOUBLE
- データ値は二重引用符 (") で囲まれます。
- いいえ
- データ値は引用符で囲まれません。 これがデフォルトです。
- RECORDDELIM または RECORD_DELIMITER
- 行 (レコード) 区切り文字として解釈されるストリング・リテラル。 デフォルトは
'\n'です。CRINSTRING が TRUE に設定されている場合、RECORDDELIM に CR ('\r') 文字を含めることはできません。 ただし、唯一の例外として、テキスト形式のみの CRINSTRING で CRLF ('\r\n') 区切り文字を含めることができます。
- REMOTESOURCE
- 外部表ファイルが存在する場所、および外部表がリモート・システムにある場合、ファイル・データを圧縮するかどうか。
- LOCAL
- ファイルはローカル・サーバー (つまり、データベースをホストするシステム) 上にあります。 これがデフォルトです。
- はい
- ファイルはローカル・サーバー以外のシステム上にあります。 例えば、クライアント・システムがデータベースに接続されていて、そのシステムにファイルが存在する場合に、YES と指定します。 ファイル・データは、転送前に圧縮されません。
- GZIP
- YES と同様ですが、ファイル・データは、データが転送される前に GZIP 圧縮アルゴリズムを使用して圧縮され、受信後に圧縮解除される点が異なります。 これにより、大量の圧縮可能データが転送されるときの全体的なパフォーマンスが向上します。
- LZ4
- YES と同様ですが、ファイル・データは、データが転送される前に LZ4 圧縮アルゴリズムを使用して圧縮され、受信後に圧縮解除される点が異なります。 これにより、大量の圧縮可能データが転送されるときの全体的なパフォーマンスが向上します。
REMOTESOURCE、SWIFT、および S3 オプションは相互に排他的です。 REMOTESOURCE オプションと PARTITION オプションは相互に排他的です。 REMOTESOURCE オプションの値が GZIP または LZ4 の場合は、COMPRESS オプションは指定できません。
- REQUIREQUOTES
- 引用符が必須かどうか。
- TRUE または ON
- 引用符は必須です。 QUOTEDVALUE オプションは、YES、SINGLE、または DOUBLE に設定する必要があります。
- FALSE または OFF
- 引用符は必須ではありません。 これがデフォルトです。
- SKIPROWS または SKIP_ROWS
- ロード操作の場合、データのロードを開始する前にスキップする行数。 デフォルトは 0 です。 スキップされた行はスキップされる前に処理されるため、スキップされた行は引き続き処理エラーを引き起こす可能性があります。
- SOCKETBUFSIZE
- ソース・ファイルから読み取られるデータのチャンクのサイズ (バイト単位)。 値の有効範囲は 64 KB から 800 MB です。 この範囲外の値を指定すると、値は最も近い有効な値に設定されます。 デフォルトは 8 MB です。
- STRICTNUMERIC
- ロード操作の場合、DECIMAL フィールドに挿入される値のスケールがフィールドに定義されているスケールを超えたときに、その値を処理する方法。
- TRUE または ON
- 挿入される値を含む行はリジェクトされます。 例えば、以下のいずれかの値が DECIMAL(5,3) フィールドにロードされた場合、その値を含む行はリジェクトされます。
12.666666666 -98.34496862785 0.00089 - FALSE または OFF
- 挿入される値が含まれている行は受け入れられ、フィールドに定義されたスケールを超える小数部の部分は切り捨てられます。 これがデフォルトです。 例えば、上記の例の値は次のように変換されます。
12.666 -98.344 0.000
- SWIFT
- ソース・データ・ファイルが Swift オブジェクト・ストア内にあることを指定します。 REMOTESOURCE、SWIFT、および S3 オプションは相互に排他的です。 ファイル名を指定するには、DATAOBJECT オプションを使用します。構文:
ここで、SWIFT (endpoint, authKey1, authKey2, bucket)- エンドポイント
- SWIFT Web サービスの URL を指定する文字ストリング。 authKey1
- ユーザーの検証に使用される Swift オープン・スタック・アカウントのアクセス ID またはユーザー名を指定する文字ストリング。 authKey2
- ユーザーの検証に使用される Swift オープン・スタック・アカウントのパスワードを指定する文字ストリング。 バケット
- ファイルが入っている Swift オープン・スタック・コンテナー (バケット) の名前。
例:CREATE EXTERNAL TABLE exttab1(a int) using (dataobject 'datafile1.dat' swift('https://dal05.objectstorage.softlayer.net/auth/v1.0/', 'XXXOS123456-2:xxx123456', 'b207c6e974020737d92174esdf6d5be9382aa4c335945a14eaa9172c70f8df16', 'my_dev' ) ) - S3
- ソース・データ・ファイルが S3 互換オブジェクト・ストア内にあることを指定します。 REMOTESOURCE、SWIFT、および S3 オプションは相互に排他的です。 ファイル名を指定するには、DATAOBJECT オプションを使用します。構文:ここで、
S3 (endpoint, authKey1, authKey2, bucket)- エンドポイント
- S3 互換 Web サービスの URL を指定する文字ストリング。 authKey1
- ユーザーおよびすべてのユーザー・アクションの検証に使用されるアクセス・キーの S3 アクセス・キー ID を指定する文字ストリング。 IBM Cloud Object Storageの場合、これは HMAC 資格情報からのアクセス・キー ID です。 authKey2
- ユーザーおよびすべてのユーザー・アクションの検証に使用されるアクセス・キーの S3 秘密鍵を指定する文字ストリング。 IBM Cloud Object Storageの場合、これは HMAC 資格情報からの秘密アクセス・キーです。 バケット
- ファイルが入っている S3 バケットの名前。
注: IBM Cloud Object Storageの場合、HMAC クレデンシャルを作成するには、新しいサービス・クレデンシャルを作成するときに、Add Inline Configuration Parametersフィールドで '{"HMAC:true}を指定します。AWS S3 の使用例:CREATE EXTERNAL TABLE exttab2(a int) using (dataobject 'datafile2.dat' s3('s3.amazonaws.com', 'XXXOS123456-2:xxx123456', 'bs07c6e974040737d92174e5e96d5be9382aa4c33xxx5a14eaa9172c70f8df16', 'my_dev' ) )IBM Cloud Object Storage の使用例:CREATE EXTERNAL TABLE exttab2(a int) using (dataobject 'datafile2.dat' s3('s3-api.us-geo.objectstorage.softlayer.net', '1a2bkXXXsaddntLo0xX0', 'XXxxiEPjJ7T7WBUz74E6abcdABCDE8Q7RgU4gYY9', 'my_dev' ) ) - AZURE
- Microsoft Azure Blob Storage に置かれているソース・データ・ファイルを使用するように指定します。 REMOTESOURCE、SWIFT、S3、および AZURE の各オプションは相互に排他的です。 ファイル名を指定するには、DATAOBJECT オプションを使用します。 構文:構文:ここで、
AZURE (endpoint, authKey1, authKey2, bucket)- エンドポイント
- AZURE Web サービスの URL を指定する文字ストリング。 authKey1
- ユーザーの検証に使用される Azure Blob Storage アカウントのアクセス ID またはユーザー名を指定する文字ストリング。 authKey2
- ユーザーの検証に使用される Azure Blob Storage アカウントのアクセス・キーを指定する文字ストリング。 バケット
- ファイルが入っている Azure Blob Storage コンテナー (バケット) の名前。
例:CREATE EXTERNAL TABLE exttab1(a int) using (dataobject 'datafile1.dat' azure('https://my_account.blob.core.windows.net', 'my_account', 'lW+oHjmZecPS++IKgThAHlMUOaFUA5C6Z2RlFmc9JPpK34RO/ZIOywzILxJnzGPHz6d/yDrcQDAwH5wySbOZMQ==', 'my_bucket' ) )IBM Cloud Object Storage の使用例:CREATE EXTERNAL TABLE exttab2(a int) using (dataobject 'datafile2.dat' s3('s3-api.us-geo.objectstorage.softlayer.net', '1a2bkXXXsaddntLo0xX0', 'XXxxiEPjJ7T7WBUz74E6abcdABCDE8Q7RgU4gYY9', 'my_dev' ) ) - TIMEDELIM
- 時間コンポーネント (時間、分、および秒) を区切る 1 バイト文字。 デフォルトは
':'です。 TIMEDELIM が空ストリングに設定されている場合、時間、分、および秒はすべて 2 桁の数字として指定する必要があります。 TIMESTAMP_FORMAT オプションと TIMEDELIM オプションは相互に排他的です。 - TIMEROUNDNANOS または TIMEEXTRAZEROS
- 注: このオプションは TIMESTAMP 列にのみ適用されます。
- TIMESTYLE
- データ・ファイルで使用される時刻形式。
- 24HOUR
- 24 時間形式。例えば、23: 55。 これがデフォルトです。
- 12HOUR
- 12 時間形式。例えば、11:55 PM。 AM または PM トークンは、その直前にシングル・スペースを入れることができ、大/小文字の区別はありません。
- TIMESTAMP_FORMAT
- データ・ファイルのタイム・スタンプ・フィールドの形式。 値は、 TIMESTAMP_FORMAT スカラー関数で受け入れられる任意のフォーマット・ストリングにすることができます。 デフォルト値は 'YYYY-MM-DD HH.MI.SS' です。 TIMESTAMP_FORMAT オプションと TIMEDELIM、DATEDELIM、TIMESTYLE、または DATESTYLE オプションは相互に排他的です。
- TIME_FORMAT
- データ・ファイルの時刻フィールドの形式。 値は、 TIMESTAMP_FORMAT スカラー関数で受け入れられる任意の時刻形式ストリングにすることができます。 デフォルトは HH.MI.SS です。 TIME_FORMAT オプションと TIMEDELIM オプションまたは TIMESTYLE オプションは相互に排他的です。
- TRIMBLANKS
- 外部表でストリング内の先行ブランクまたは末尾ブランク (つまり、先行または末尾のスペース文字) を扱う方法。
- LEADING
- すべての先行ブランク (つまり、最初の非ブランク文字の前にあるブランク) は除去されます。
- TRAILING
- すべての末尾ブランク (つまり、最後の非ブランク文字の後にあるブランク) は除去されます。
- BOTH
- 先行ブランクおよび末尾ブランクはすべて削除されます。
- NONE
- ブランクは除去されません。 これがデフォルトです。
- TRUNCSTRING または TRUNCATE_STRING
- 宣言されたストレージ・サイズを超える CHAR または VARCHAR ストリングのシステムでの処理方法。
- はい
- 宣言されたストレージ・サイズを超えるストリング値は切り捨てられます。
- いいえ
- 宣言されたストレージ・サイズをストリング値が超えるとエラーが返されます。 これがデフォルトです。
- Y2BASE
- 100 年の範囲の始まりとなる年。 2 桁で指定された年はこの年からカウントされます。 デフォルトは 2000 です。 DATESTYLE が Y2MD、MDY2、DMY2、MONDY2、または DMONY2 に設定されている場合は、このオプションを必ず指定する必要があります。
表 3. Options オプション デフォルト ロード操作に適用 アンロード操作に適用 Azure (デフォルトなし) Y Y BOOLSTYLE または BOOLEAN_STYLE 1_0 Y Y CARDINALITY (デフォルトなし) Y Y CCSID (デフォルトなし) Y Y COMPRESS いいえ Y Y CRINSTRING いいえ Y Y CTRLCHARS いいえ Y N DATAOBJECT または FILE_NAME (デフォルトなし) Y Y DATEDELIM '-' Y Y DATETIMEDELIM スペース (' ') Y Y DATESTYLE YMD Y Y DATE_FORMAT YYYY-MM-DD Y Y DECIMALDELIM または DECIMAL_CHARACTER '.' Y Y DELIMITER '|' Y Y ENCODING INTERNAL Y Y1 (Y) ESCAPECHAR または ESCAPE_CHARACTER (デフォルトなし) Y Y FILLRECORD いいえ Y N FORMAT または FILE_FORMAT テキスト Y Y IGNOREZERO または TRIM_NULLS いいえ Y N INCLUDEHEADER または COLUMN_NAMES いいえ N Y INCLUDEZEROSECONDS いいえ Y Y INCLUDEHIDDEN いいえ Y N LFINSTRING いいえ Y N LOGDIR または ERROR_LOG 外部表ファイルのターゲット・ディレクトリー Y N MULTIPARTSIZEMB MULTIPARTSIZEMB dbm config パラメーターによって指定された値。 Y N MAXERRORS または MAX_ERRORS 1 Y N MAXROWS または MAX_ROWS 0 Y N MERIDIANDELIM スペース (' ') Y Y NOLOG いいえ Y Y NULLVALUE または NULL_VALUE NULL' Y Y PARTITION (デフォルトなし) Y Y QUOTEDNULL はい Y N QUOTEDVALUE いいえ Y N RECORDDELIM または RECORD_DELIMITER '¥ n' Y N REMOTESOURCE LOCAL Y Y REQUIREQUOTES いいえ Y N SKIPROWS または SKIP_ROWS 0 Y N SOCKETBUFSIZE 8 MB Y Y STRICTNUMERIC いいえ Y N SWIFT (デフォルトなし) Y Y S3 (デフォルトなし) Y Y TIMEDELIM ':' Y Y TIMEROUNDNANOS または TIMEEXTRAZEROS いいえ Y N TIMESTAMP_FORMAT 'YYYY-MM-DD HH.MI.SS' Y Y TIMESTYLE 24HOUR Y Y TIME_FORMAT HH.MI.SS Y Y TRIMBLANKS NONE Y Y TRUNCSTRING または TRUNCATE_STRING いいえ Y N Y2BASE 2000 Y N 1 値 INTERNAL、UTF8、および LATIN9 の場合のみ。 結合表 joined-table (結合表) は、 1 つまたは複数の結合演算の結果である中間結果セットを指定します。 詳しくは、 結合表を参照してください。
期間指定period-specification によって、 参照表の行のうち期間が指定と一致するもので構成される中間結果表を指定します。 period-specification は、テンポラル表の名前またはビューの名前に続いて指定できます。 同じ表参照に対して同じ期間名を複数回指定することはできません (SQLSTATE 428HY)。 表参照の行は、期間指定を適用することによって得られます。
表がシステム期間テンポラル表であり、期間 SYSTEM_TIME の period-specification が指定されていない場合、表参照にはすべての現在行が含まれ、表の履歴行は含まれません。 表がアプリケーション期間テンポラル表であり、期間 BUSINESS_TIME の period-specification が指定されていない場合、表参照には表のすべての行が含まれます。 表がバイテンポラル表であり、SYSTEM_TIME および BUSINESS_TIME の period-specification が両方とも指定されていない場合、表参照には表のすべての現在行が含まれ、表の履歴行は含まれません。
表参照が single-view-reference である場合、ビュー参照の行は、そのビューの結果表を計算する際にアクセスされるすべてのテンポラル表に期間指定を適用することによって得られます。 ビューがいずれのテンポラル表にもアクセスしない場合、period-specification はビューの結果表に影響を及ぼしません。 period-specification が使用される場合、そのビュー定義、またはビューの結果表を計算する際に参照される任意のビュー定義に、コンパイル済み SQL 関数への参照も、NO SQL 以外のデータ・アクセス標識を持つ外部関数に対する参照も含めることはできません (SQLSTATE 428HY)。
CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターが NULL 値以外の値に設定されている場合は、SYSTIMESENSITIVE BIND オプションで有効になっている値が NO でない限り、SYSTEM_TIME を参照する period-specification を表参照またはビュー参照に指定してはなりません (SQLSTATE 428HY)。
CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターが NULL 値以外の値に設定されている場合は、BUSTIMESENSITIVE BIND オプションで有効になっている値が NO でない限り、BUSINESS_TIME を参照する期間指定を表参照またはビュー参照に指定してはなりません (SQLSTATE 428HY)。
- FOR SYSTEM_TIME
期間 SYSTEM_TIME を period-specification に使用することを指定します。 この節を table-name の後に指定する場合、 その表はシステム期間テンポラル表でなければなりません (SQLSTATE 428HY)。 CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターの値が NULL 値ではなく、かつ、 SYSTIMESENSITIVE バインド・オプションが YES に設定されている場合は、 FOR SYSTEM_TIME を指定してはなりません (SQLSTATE 428HY)。
- FOR BUSINESS_TIME
期間 BUSINESS_TIME を period-specification に使用することを指定します。 この節を table-name の後に指定する場合、 BUSINESS_TIME は、その表に定義されている期間でなければなりません (SQLSTATE 4274M)。 CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの値が NULL 値ではなく、かつ、 BUSTIMESENSITIVE バインド・オプションが YES に設定されている場合は、 FOR BUSINESS_TIME を指定してはなりません (SQLSTATE 428HY)。
value、value1、および value2value、value1、および value2 の各式は、NULL 値を戻すか、DATE、TIMESTAMP、または文字ストリング (CLOB と DBCLOB 以外) のいずれかの組み込みデータ・タイプの値を戻します (SQLSTATE 428HY)。 引数が文字ストリングである場合は、タイム・スタンプまたは日付の有効な文字ストリング表記でなければなりません (SQLSTATE 22007)。 タイム・スタンプの値のストリング表記の有効なフォーマットについては、『日付/時刻の値』トピックの
「日付/時刻の値のストリング表記」
セクションを参照してください。それぞれの式には、以下のサポートされているオペランドのいずれかを組み込むことができます (SQLSTATE 428HY)。- 定数
- 特殊レジスター
- 変数。 詳しくは、 変数の参照を参照してください。
- パラメーター・マーカー
- スカラー関数。ただし引数が、サポートされているオペランドである場合 (ユーザー定義関数および非決定論的な関数は使用できません)
- CAST 指定。ただしキャスト・オペランドが、サポートされているオペランドである場合
- 算術演算子および算術オペランドを使用する式
- AS OF 値
指定期間の開始列の値が value 以下であり、その期間の終了列の値が value より大きい各行が表参照に含まれることを指定します。 value が NULL 値の場合は、表参照は空の表になります。
例: 次の照会は、2010 年 8 月 31 日時点の保険契約番号 100 の保険補償範囲情報を戻します。SELECT coverage FROM policy_info FOR BUSINESS_TIME AS OF '2010-08-31' WHERE policy_id = '100'- から value1 から value2
value1 から value2 までの指定期間に存在する行が表参照に含まれることを指定します。 表参照に行が含まれるのは、その行において、指定期間における開始列の値が value2 より小さく、かつ指定期間における終了列の値が value1 より大きい場合です。 value1 が value2 以上である場合、表参照に含まれる行数はゼロです。 value1 または value2 が NULL 値の場合は、表参照は空の表になります。
例: 次の照会は、2009 年の期間中 (2009 年 1 月 1 日の午前 0 時から 2010 年 1 月 1 日の直前まで) の保険契約番号 100 の保険補償範囲情報を戻します。SELECT coverage FROM policy_info FOR BUSINESS_TIME FROM '2009-01-01' TO '2010-01-01' WHERE policy_id = '100'- 間 value1 および value2
value1 と value2 の間の任意の時点で指定期間が重なり合う行が表参照に含まれることを指定します。 表参照に行が含まれるのは、その行において、指定期間における開始列の値が value2 以下で、かつ指定期間における終了列の値が value1 より大きい場合です。 value1 が value2 より大きい場合、表参照に含まれる行数はゼロです。 value1 が value2 に等しい場合、この式は AS OF value1 に相当します。 value1 または value2 が NULL 値の場合は、表参照は空の表になります。
例: 次の照会は、2008 年の期間中 (2008 年 1 月 1 日から 2008 年 12 月 31 日まで) における、保険契約番号 100 の保険補償範囲情報を戻します。SELECT coverage FROM policy_info FOR BUSINESS_TIME BETWEEN '2008-01-01' AND '2008-12-31' WHERE policy_id = '100'
period-specification 節の代替構文を以下に示します。- FOR SYSTEM_TIME AS OF の代わりに AS OF TIMESTAMP を指定できます。
- FOR SYSTEM_TIME BETWEEN の代わりに VERSIONS BETWEEN TIMESTAMP を指定できます。
相関文節- すべての表参照の直接的な名前はユニークでなければなりません。 直接的な名前とは、以下の名前です。
- correlation-name (相関名)
- 後に correlation-name の付いていない table-name
- 後に correlation-name の付いていない view-name
- 後に correlation-name の付いていない nickname
- 後に correlation-name の付いていない alias-name
correlation-clause 節が function-name 参照、xmltable-expression 式、ネストした表の式、または data-change-table-reference 参照の後に付かない場合、または typed-correlation-clause 節が function-name 参照の後に付かない場合には、その表参照には直接的な名前はありません。
各 correlation-name は、直前の table-name、view-name、nickname、function-name の参照、xmltable-expression、ネストした表式、または data-change-table-reference の指定子と定義されます。 列に対する修飾参照では、直接的な名前を使用しなければなりません。 同じ表名、ビュー名、またはニックネームを 2 回指定する場合は、その少なくとも 1 回の指定の後に correlation-name を付ける必要があります。 correlation-name は、表、ビュー、 またはニックネームの列に対する参照を修飾するのに使用されます。 correlation-name を指定すると、 column-nameを指定して、 表参照の列に名前を付けることもできます。 correlation-clause に column-name が含まれない場合、直接的な列名は以下のようにして決定されます。- table-reference (表参照) がtable-name、view-name、nickname、または alias-name である場合は、参照されている表、ビュー、またはニックネームの列名
- table-reference が function-name 参照である場合は、CREATE FUNCTION ステートメントの RETURNS 節で指定されている列名
- table-reference が xmltable-expression である場合は、xmltable-expression の COLUMNS 節で指定されている列名
- table-reference が nested-table-expression である場合は、全選択により公開される列名
- table-reference が data-change-table-reference である場合は、任意の定義済み INCLUDE 列に加えて、データ変更ステートメントのターゲット表にある列名
テーブル条項 (tablesample-clause) オプションの tablesample-clause を使用すると、 指定された table-name のすべての内容ではなく、 その table-name の行のランダム・サブセット (サンプル) をこの照会のために取得できます。 このサンプリングは、 where-clause で指定されたすべての述部に加えて行われます。 オプションの REPEATABLE 節が指定されていない限り、 照会を実行するたびに、通常、異なるサンプルが生成されます。 ただし変性の場合、サンプル・サイズに比べて表が小さすぎるので、 すべてのサンプルは同じ行を戻します。 サンプル・サイズは括弧内の numeric-expression1 で制御されます。 これは、表の中で戻すべきおおよそのパーセント (P) を示します。
- TABLESAMPLE
サンプルを取得する方法は TABLESAMPLE キーワードの後に指定され、BERNOULLI (ベルヌーイ) または SYSTEM のいずれかが可能です。 実際のサンプルの正確な行数は照会を実行するたびに異なることがあります。しかし平均では、述部によって行数がさらに削減される前の段階で、表のおよそ P パーセントです。
table-name は既に保管されている表でなければなりません。 マテリアライズ照会表 (MQT) の名前も指定できますが、 MQT の定義に関連している副選択または表式は指定できません。これは、 データベース・マネージャーがその副選択に対応する MQT にアクセス・パスを指定するとは限らないためです。
セマンティクス的には、表のサンプリングは、 述部の適用または結合の実行などの、他のすべての照会処理よりも前に実行されます。 1 つの照会の実行中にサンプリングされた同じ表に繰り返しアクセスする場合 (例えば、 ネストされたループ結合や相関副照会の場合)、常に同じサンプルが戻されます。 1 つの照会で複数の表をサンプリングすることができます。
- BERNOULLI
BERNOULLI (ベルヌーイ) サンプリングではそれぞれの行が個別に考慮されます。 サンプル内の各行は、 他の行とは関係なく、P/100 の確率 (P は numeric-expression1 の値) で組み込まれて、1 - P/100 の確率で除外されます。 したがって、numeric-expression1 の値が 10 (つまり 10 % のサンプル) と評価された場合、 各行は 0.1 の確率で組み込まれて、0.9 の確率で除外されます。
- SYSTEM
SYSTEM サンプリングの場合、 サンプリングを実行する最も効率的な方法をデータベース・マネージャーに判断させます。 ほとんどの場合、table-name に SYSTEM サンプリングを適用すると、 table-name の各ページがサンプルに組み込まれる確率は P/100、除外される確率は 1 - P/100 です。 組み込まれた各ページ内のすべての行がサンプルの対象となります。 table-name の SYSTEM サンプリングは一般に、BERNOULLI サンプリングよりもはるかに速く実行されます。取得する必要のあるデータ・ページが少ないためです。 ただし、SUM(SALES) などの集約関数の場合、table-name の行がその照会で参照される列にクラスター化されている場合は特に、SYSTEM サンプリングで得られる見積精度が低くなる可能性が大きくなります。 特定の状況では、SYSTEM サンプリングを BERNOULLI サンプリングであるかのように実行した方が効率的であるとオプティマイザーが判断することもあります。 例えば、table-name の述部が索引によって適用され、サンプリング率 P よりもかなり限定的になる場合です。
numeric-expression1numeric-expression1 は、 table-name から得られるサンプルのサイズを指定します (パーセントとして表されます)。 これは、列を含むことができない定数数式でなければなりません。 式は 100 以下の正数に評価される必要がありますが、0 と 1 の間の値でもかまいません。 例えば、値 0.01 は 1 パーセントの 100 分の 1 を表します。これは、平均して 10 000 行につき 1 行がサンプリングされることを意味します。 numeric-expression1 が値 100 に評価される場合、 tablesample-clause が指定されていないかのように扱われます。 numeric-expression1 が NULL 値に評価されたり、 100 を超えたり 0 を下回ったりする値に評価される場合には、エラーが戻されます (SQLSTATE 2202H)。
- リピート可能 ( numeric-expression2 )
照会の実行ごとにサンプリングを繰り返すのが望ましい場合があります。 例えば、レグレッション・テスト中や照会のデバッグ中などが該当します。 これを行うには、REPEATABLE 節を指定します。 REPEATABLE 節では、 括弧の中に numeric-expression2 を指定する必要があります。 この数式は、乱数発生ルーチンのシードと同じ役割を果たします。 table-name の tablesample-clause に REPEATABLE 節を追加すれば、 (numeric-expression2 に同じ値を使用して) その照会を繰り返し実行した場合、 同じサンプルが戻されるようになります (データそのものが更新、再編成、または再パーティションされないことが前提です)。 複数の照会の間で table-name の同じサンプルが使われるようにするには、 グローバル一時表の使用をお勧めします。 他の方法として、複数の照会を 1 つの照会に結合することもできます。 その場合、WITH 節を使って定義された 1 つのサンプルへの複数の参照があります。
次に例を示します。- 監査のために、Sales 表から 10 % のベルヌーイ・サンプルを抽出します。
SELECT * FROM Sales TABLESAMPLE BERNOULLI(10) - 北東部 (Northeast) 地域での、それぞれの商品カテゴリーごとの売上総額 (Sales.Revenue) を計算します。その際、Sales 表のランダム 1 % SYSTEM サンプリングを使用します。 セマンティクス的に、SUM はサンプルそのものに対する処理です。
したがって、Sales 表全体の売上を推定するには、
照会においてその SUM をサンプリング率 (0.01) で除算する必要があります。
SELECT SUM(Sales.Revenue) / (0.01) FROM Sales TABLESAMPLE SYSTEM(1) WHERE Sales.RegionName = 'Northeast' GROUP BY Sales.ProductCategory - REPEATABLE 節を使って、上記の照会を変更し、照会が実行されるたびに同じ (ランダムな) 結果が得られるようにします。 括弧で囲まれた定数は任意の値です。
SELECT SUM(Sales.Revenue) / (0.01) FROM Sales TABLESAMPLE SYSTEM(1) REPEATABLE(3578231) WHERE Sales.RegionName = 'Northeast' GROUP BY Sales.ProductCategory
- table-UDF-cardinality-clause
- table-UDF-cardinality 節は、FROM 節内の各ユーザー定義表関数参照に対して指定できます。 このオプションは、このオプションを指定する SELECT ステートメントのみを対象に、返されると予想される行数を示します。 CARDINALITY 節および CARDINALITY MULTIPLIER 節は、表関数がインライン化された SQL 表関数である場合は使用できません (SQLSTATE 42887)。
- CARDINALITY 整数定数
- ユーザー定義関数の参照によって返されると予想される行数の見積もりを指定します。 integer-constant の値の範囲は、0 から 9 223 372 036 854 775 807 までです。
- CARDINALITY MULTIPLIER 数値定数
指定された CARDINALITY MULTIPLIER numeric-constant と参照カーディナリティー値の積が、表関数の参照によって返されると予想される行数としてデータベース・サーバーで使用されます。
この場合、numeric-constant は、整数、10 進数、または浮動小数点フォーマットで指定できます。 値はゼロ以上でなければなりません。 10 進数表記を使用する場合、桁数は 31 桁までです。 整数値は、小数部のない 10 進数として扱われます。 ゼロを指定した場合、または計算結果のカーディナリティーが 1 より小さい場合、ユーザー定義表関数への参照のカーディナリティーは 1 と見なされます。
表関数名の SYSSTAT.ROUTINES の CARDINALITY 列の値が、参照カーディナリティー値として使用されます。 SYSSTAT.ROUTINES の CARDINALITY 列に値が設定されていない場合、参照カーディナリティー値のデフォルト値は有限値であると見なされます。 この有限値は、RUNSTATS ユーティリティーが統計を収集していない表に関して想定されているのと同じ値です。
キーワード CARDINALITY または CARDINALITY MULTIPLIER の後には、数値定数のみを指定できます。 ホスト変数とパラメーター・マーカーはサポートされません。 表関数参照でカーディナリティー値を指定しても、SYSSTAT.ROUTINES カタログ・ビュー内の関数の CARDINALITY 列の値は変更されません。
外部表関数およびコンパイル済み SQL ユーザー定義表関数の CARDINALITY 値は、SYSSTAT.ROUTINES カタログ・ビュー内の CARDINALITY 列を更新することによって変更できます。 外部表関数の CARDINALITY 値は、ユーザー定義表関数の作成時に、CREATE FUNCTION (外部表) ステートメントに CARDINALITY オプションを指定して初期化することもできます。
型付き相関文節 - typed-correlation-clause 節は、汎用表関数によって生成される表の外観と内容を定義します。 この節は、table-function-references が汎用表関数のときに指定しなければなりません。これ以外の表参照の場合は指定できません。 汎用表関数では、以下の data-type 値がサポートされています。
表 4. 汎用表関数でサポートされるデータ・タイプ SQL 列のデータ・タイプ 同等の Java™ データ型 SMALLINT short INTEGER int BIGINT long REAL 浮動小数点 DOUBLE double DECIMAL(p,s) java.math.BigDecimal NUMERIC(p,s) java.math.BigDecimal CHAR(n) java.lang.String CHAR(n) FOR BIT DATA COM.ibm.db2.app.Blob VARCHAR(n) java.lang.String VARCHAR(n) FOR BIT DATA COM.ibm.db2.app.Blob GRAPHIC(n) java.lang.String VARGRAPHIC(n) ストリング BLOB(n) COM.ibm.db2.app.Blob CLOB(n) COM.ibm.db2.app.Clob DBCLOB(n) COM.ibm.db2.app.Clob 日付 ストリング 時刻 ストリング TIMESTAMP ストリング XML AS CLOB(n) COM.ibm.db2.jcc.DB2Xml 継続ハンドラー nested-table-expression で発生するある種のエラーは許容でき、エラーを戻す代わりに、照会は続行した上で結果を戻します。 これは、エラー・トレラントな nested-table-expression と呼ばれます。
RETURN DATA UNTIL 節を指定すると、指定の条件が満たされる前の全選択から戻された行によって、全選択の結果セットが作られることになります。 これは、全選択の結果セットが完全なものでなくても (たとえ空の結果セットであっても)、nested-table-expression の結果として許容されるということです。
FEDERATED キーワードは、リモート・データ・ソースで発生したエラーのみに対処するよう条件を制限します。
条件は、長さ 5 の string-constant による SQLSTATE 値として指定できます。 オプションで、指定した SQLSTATE 値ごとに SQLCODE 値を指定できます。 移植可能なアプリケーションの場合は、可能な限り SQLSTATE 値を指定するようにします。SQLCODE 値は通常、プラットフォーム間での移植ができず、SQL 標準にも含まれていないからです。
許容されるのは一部の条件のみです。 照会の他の部分の実行ができなくなるようなエラーは許容できないので、そのようなエラーが発生した場合は、照会全体についてエラーが戻されます。 specific-condition-value では、特定の SQLSTATE または SQLCODE 値が指定されていても、データベース・マネージャーによって実際に許容されない条件を指定することもあります。その場合にはエラーが戻されます
エラー・トレラントな nested-table-expression が含まれる照会やビューは読み取り専用です。
エラー・トレラントな nested-table-expression の全選択が、マテリアライズ照会表を使用して最適化されることはありません。
- 特定条件値 (specific-condition-value)
- 以下の SQLSTATE 値および SQLCODE 値を指定した場合は、データベース・マネージャーによって許容される可能性があります。
- SQLSTATE 08001; SQLCODE -1336、-30080、-30081、-30082
- SQLSTATE 08004
- SQLSTATE 42501
- SQLSTATE 42704; SQLCODE -204
- SQLSTATE 42720
- SQLSTATE 28000
表参照における相関参照
Example 1: SELECT t.c1, z.c5
FROM t, TABLE( tf3(t.c2) ) AS z -- t precedes tf3
WHERE t.c3 = z.c4; -- in FROM, so t.c2
-- is known
Example 2: SELECT t.c1, z.c5
FROM t, TABLE( tf4(2 * t.c2) ) AS z -- t precedes tf4
WHERE t.c3 = z.c4; -- in FROM, so t.c2
-- is known
Example 3: SELECT d.deptno, d.deptname,
empinfo.avgsal, empinfo.empcount
FROM department d,
LATERAL (SELECT AVG(e.salary) AS avgsal,
COUNT(*) AS empcount
FROM employee e -- department precedes nested
WHERE e.workdept=d.deptno -- table expression and
) AS empinfo; -- LATERAL is specified,
-- so d.deptno is known Example 4: SELECT t.c1, z.c5
FROM TABLE( tf6(t.c2) ) AS z, t -- cannot resolve t in t.c2!
WHERE t.c3 = z.c4; -- compare to Example 1 above.
Example 5: SELECT a.c1, b.c5
FROM TABLE( tf7a(b.c2) ) AS a, TABLE( tf7b(a.c6) ) AS b
WHERE a.c3 = b.c4; -- cannot resolve b in b.c2!
Example 6: SELECT d.deptno, d.deptname,
empinfo.avgsal, empinfo.empcount
FROM department d,
(SELECT AVG(e.salary) AS avgsal,
COUNT(*) AS empcount
FROM employee e -- department precedes nested
WHERE e.workdept=d.deptno -- table expression but
) AS empinfo; -- LATERAL is not specified,
-- so d.deptno is unknown
