>>-table-name--+-------------------------------------+---AS--(--fullselect--)--> | .-,------------------. | | V | (1) | '-(-----+--------------+--+---)-------' '-column-name--' >--------------------------------------------------------------><
注:
共通表式 を使用すると、結果表を table-name (表名) によって定義して、 それをその後に続く全選択の任意の FROM 文節に指定できるようにすることができます。 単一の WITH キーワードの後に、複数の共通表式を指定することができます。 指定する各共通表式は、 それ以降の共通表式の FROM 文節の中でも名前によって参照することができます。
列のリストを指定する場合、その中の列の名前の数は、 全選択の結果表内の列数と同じ数でなければなりません。 各 column-name (列名) は、固有かつ非修飾でなければなりません。 これらの列名を指定しない場合、 共通表式の定義に使用された全選択の選択リストから名前が取られます。
共通表式の table-name は、 同じステートメントの他の共通表式の table-name すべてと異なるものでなければなりません (SQLSTATE 42726)。 共通表式が INSERT ステートメントに指定されている場合、table-name を、 その挿入の対象である表または視点の名前にすることはできません (SQLSTATE 42726)。 共通表式の table-name は、その全選択を通じて、 どの FROM 文節の中でも表名として指定することができます。 共通表式の table-name は、(カタログの中で) 同じ修飾名の既存の表、視点、 または別名を指定変更するものとなります。
同じステートメントの中に複数の共通表式が定義されている場合、 共通表式相互間の循環参照があってはなりません (SQLSTATE 42835)。 循環参照 が生じるのは、 2 つの共通表式 dt1 と dt2 が作成された場合に、 dt1 が dt2 を参照し、 dt2 が dt1 を参照するようになる場合です。
共通表式 は、 CREATE VIEW および INSERT の各ステートメントの前でもオプションとして使用できます。
共通表式 は、次のような場合に使用することができます。
共通表式の全選択 の FROM 文節の中にそれ自体への参照が含まれる場合、 その共通表式は、再帰的共通表式 です。 再帰処理を使用した照会は、部品構成表 (BOM)、予約システム、 およびネットワーク計画などのアプリケーションをサポートする上で役立ちます。 例については、付録 M, 再帰の例: 部品構成表 を参照してください。
再帰的共通表式では、次のことが成り立っていなければなりません。
これらの全選択の FROM 文節には、 再帰サイクルの一部である共通表式に対する参照を多くても 1 つまで含めることができます (SQLSTATE 42836)。
再帰的共通表式を開発するときには、 無限再帰サイクル (ループ) が作成される恐れについて常に注意してください。 再帰サイクルは、必ず終了するようにしてください。 これは、関係しているデータが循環している場合に特に重要です。 再帰的共通表式には、無限ループを防止する述部を含めるようにしてください。 再帰的共通表式には、次のものを含めるようにしてください。
この構文が再帰的共通表式に見つからないなら、警告が出されます (SQLSTATE 01605)。