1つの再帰ビュー定義の中に複数のシード文と再帰文を指定できます。指定される最初の文はシード文でなければなりません。
単一の再帰ビュー定義内にシードまたは再帰文をいくつでも指定できますが、システムの最大SQLテキスト サイズは1メガバイトです。
操作の開始時にシード文のセット全体が評価された後、前の再帰処理からの行を入力値として使用して、各再帰的サイクルで再帰文のセット全体が評価されます。再帰的ビューの構築を参照してください。
一例として次のビュー定義を考えます。このビューを使用して、電車または飛行機のいずれかによってドイツのカイザルスラウテルンという都市から到着できるすべての都市を見つけます。
CREATE RECURSIVE VIEW tc (source, destination, carrier, depth) AS ( SELECT f.source, f.destination, f.carrier, 0 AS depth FROM flights AS f -- Query_1 WHERE f.source ='Kaiserslautern' UNION ALL (SELECT r.source, r.destination,'EuroRail', 0 AS depth FROM trains AS r -- Query_2 WHERE r.source ='Kaiserslautern' UNION ALL SELECT tcq.source, f.destination, f.carrier, tcq.depth + 1 FROM tc AS tcq, flights AS f -- Query_3 WHERE tcq.destination=f.source AND tcq.depth <= 100 UNION ALL SELECT tcq.source, r.destination,'EuroRail', teq.depth + 1 FROM tc AS tcq, trains AS r -- Query_4 WHERE tcq.destination = r.source AND tcq.depth <= 100 ) );
この例では、Query_1とQuery_2はどちらもシード文です。それに対し、Query_3とQuery_4はどちらも再帰文です。Query_1を他の3つのクエリーから分けるために使用される括弧は、実行順序を強制するためではなく、関係を明確にするためのものです。UNION ALLセット演算子は連想的であると同時に可換性があるため、再帰的クエリーの中に括弧を指定しても実行順序には影響を与えません。
tcという名前の再帰的ビューを定義したので、後は「電車または飛行機でKaiserslauternから行くことができるすべての都市を見つける」という問題に回答するために次の単純なSELECT文を実行するだけです。
SELECT * FROM tc;