演算子、句、およびその他のさまざな機能のカテゴリ セットは再帰的ビューの定義で使用できないか、またはその使用において制約があります。
- ANSI SQL:2011 SQL規格によって定義される制約。
- Teradataによって定義される追加の制約。
- 種々の制約。
最初の機能制約のセットは、ANSI SQL:2011規格によって定義されます。ANSIによって定義される制約は、再帰ビューの単調性の違反を避けるために欠かせません(再帰処理の概念を参照)。
- 次の条件付き否定演算子はシード文内で有効です。
- NOT IN
- NOT EXISTS
再帰文の中で使用される場合は有効ではないです。
単調性の違反を避けるために、再帰文で否定表現を使用することは禁止されています。これは、SQLの再帰ビューの基本的な要件です。
- 集約はシード文内で有効です。
再帰文の中で使用される場合は有効ではないです。
LEFT OUTER JOINはシード文の中で使用される場合、有効です。
左側の外部結合は、再帰的ビューが外部結合で外部テーブル、つまり左側のテーブルである場合に限り、再帰文内での使用が有効です。
RIGHT OUTER JOINはシード文の中で使用される場合、有効です。
右側の外部結合は、再帰的ビューが外部結合で外部テーブル、つまり右側のテーブルである場合に限り、再帰的クエリー内での使用が有効です。
FULL OUTER JOINはシード文の中で使用される場合、有効です。
完全外部結合は、外部結合定義の内部テーブルと外部テーブルのどちらも定義されている再帰的ビューまたはそのコンポーネントの関係の1つではない場合に限り、再帰文内での使用が有効です。
言い換えると、再帰的クエリー内で使用される完全外部結合は再帰処理を交差できません。
再帰的ビュー定義内で指定される結合条件のON句は、述部のsubquery 内のSAMPLE句を指定できません。
次のセット演算子は、再帰的ビュー定義のコンポーネント内で使用される場合、無効です。- EXCEPT ALL
- INTERSECT ALL
- MINUS ALL
再帰的ビュー定義で有効なセット演算子は、UNION ALLだけです。
- 非線形再帰処理はサポートされません(再帰的ビュー定義はすべて線形でなければならないを参照)。
- 相互再帰処理(1つの再帰的ビューが別の再帰的ビューを参照する状態)は、サポートされません。
- 次のルールと制約は、再帰的ビュー定義内の派生テーブルのコーディングに当てはまります。
- 派生テーブルは、再帰的ビュー定義のシード文内で有効です。
- 派生テーブルは、再帰的ビュー定義の再帰文内では有効ではないです。
- 派生テーブルの定義内でWITH RECURSIVEまたは非再帰的WITH句をコーディングすることはできません。
- 派生テーブルの定義内の再帰的ビューは参照できます。
- 次のセット演算子は、再帰的ビュー定義のコンポーネント内で使用される場合、無効です。
- EXCEPT
- EXCEPT ALL
- INTERSECT
- INTERSECT ALL
- UNION
- Subquery はシード文内で有効です。
再帰的ビュー定義の再帰文の中で使用される場合はないです。
- 順序付き分析関数およびウィンドウ関数はシード文の中で有効です。
再帰文の中で使用される場合は有効ではないです。
次の句はシード文の中で有効です。- CUBE
- GROUP BY
- GROUPING SETS
- HAVING
- ROLLUP
再帰的ビュー定義内で指定される条件のHAVING句は、述部のsubquery 内のSAMPLE句を指定できません。
再帰的リクエストの中で使用される場合は有効ではないです。
DISTINCT演算子はシード文の中で使用される場合、有効です。
再帰的リクエストの中で使用される場合は有効ではないです。
- トップの n とトップの m パーセント句 (を参照してください <Teradata Vantage™ - SQLデータ操作言語、B035-1146> とトップの n とトップの m パーセント句の詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144> のビュー/置換ビューを作成するステートメント) 再帰ビュー定義内で無効です。
- 1つの再帰ビューが複数の行レベル セキュリティ保護テーブルを参照する場合でも、それらのテーブルすべてについて行レベル セキュリティ定義が同じになるわけではありません。Teradata Databaseはリクエストをアボートし、リクエスト側にエラー メッセージを返します。
- 再帰的ビューを作成するには、CREATE RECURSIVE VIEW文で定義内のそのビュー名を参照しなければなりません。
ビュー定義がその独自の名前を参照しない場合、システムは有効なビューを作成しますが、再帰処理ではありません(詳細は、非再帰的ビューのRECURSIVEの指定を参照)。
- 再帰的ビューは更新できません。
- 再帰的ビューは更新できないので、WITH CHECK OPTION句は再帰的ビュー定義では無効です。
- WITH RECURSIVE句は再帰的ビュー定義のコンポーネント内で使用される場合、無効です(WITH RECURSIVE句については<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照)。
- 再帰的クエリーまたは再帰的ビューはFROM句の中で2回以上参照できません。
- CREATE RECURSIVE VIEW定義内では非再帰的WITH句を参照できません。
- 別の再帰的ビューの参照は、再帰的ビュー定義内では無効です。
これはビュー階層のすべてのレベルに当てはまるので、より深いビュー階層レベルの別の再帰的ビューを参照する再帰的ビューを作成しないように注意する必要があります。