再帰的ビュー定義の制約 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

演算子、句、およびその他のさまざな機能のカテゴリ セットは再帰的ビューの定義で使用できないか、またはその使用において制約があります。

制約のカテゴリは次のとおりです。
  • ANSI SQL:2011 SQL規格によって定義される制約。
  • Teradataによって定義される追加の制約。
  • 種々の制約。

最初の機能制約のセットは、ANSI SQL:2011規格によって定義されます。ANSIによって定義される制約は、再帰ビューの単調性の違反を避けるために欠かせません(再帰処理の概念を参照)。

以下のリストで、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だけです。

次の機能制限のセットは、Teradataによって定義されます。これらは、ANSI SQL:2011規格によって定義される、追加の制限です。以下のリストで、Teradata制約を示します。
  • 非線形再帰処理はサポートされません(再帰的ビュー定義はすべて線形でなければならないを参照)。
  • 相互再帰処理(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句を参照できません。
  • 別の再帰的ビューの参照は、再帰的ビュー定義内では無効です。

    これはビュー階層のすべてのレベルに当てはまるので、より深いビュー階層レベルの別の再帰的ビューを参照する再帰的ビューを作成しないように注意する必要があります。