この例は相互再帰処理を示していますが、これは再帰的ビュー定義ではサポートされていません。
相互再帰処理は次の両方が当てはまるときに生じます。
- 再帰的ビューAが直接的または間接的に再帰的ビューBを呼び出す。
- 再帰的ビューBが直接的または間接的に再帰的ビューAを呼び出す。
ここで示されている2つの相互再帰的ビュー定義では、oddという名前のビューがevenという名前のビューを参照し、その逆の参照も行なわれています。
CREATE RECURSIVE VIEW even (n) AS ( SELECT * FROM (SELECT 0) AS a(i) UNION ALL SELECT m + 1 FROM odd); CREATE RECURSIVE VIEW odd (m) AS ( SELECT * FROM (SELECT 1) AS a(i) UNION ALL SELECT n + 1 FROM even);