17.05 - 例: 永久再帰処理の制御 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

次の例はflightsテーブルを使用して、循環データの永久的な再帰処理を制限する方法を示します。

    CREATE RECURSIVE VIEW reachable_from (destination, cost, depth) AS (
      SELECT root.destination, root.cost, 0 AS depth
      FROM flights AS root
      WHERE root.source = 'Paris'
    UNION ALL
      SELECT out.destination, in.cost + out.cost, in.depth + 1 AS depth
      FROM reachable_from AS in, flights AS out
      WHERE in.destination = out.source
      AND   in.depth <= 20);

この再帰的ビューは、次のSELECTリクエストによって問合わせが行なわれるように作成されています。

    SELECT *
    FROM reachable_from;

この例で変数の深さは、再帰的ビュー定義のシード文の中で0に初期化され、定義の再帰的問合わせ内で1ずつ増加するカウンターとして使用されます。

WHERE句のAND条件は決して20を超過しないようにカウンターをテストします。深さカウンターは0に初期化されたため、この条件により再帰処理の循環は21に限定されます。