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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

次の例は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に限定されます。