この例は、次の基本テーブルをその基本として使用して、永久再帰処理の可能性を制御するカウンターを持つ単純再帰的レビュー定義を構築します。
Partlist | ||
---|---|---|
Part | Subpart | Quantity |
00 | 01 | 5 |
00 | 05 | 3 |
01 | 02 | 2 |
01 | 03 | 3 |
01 | 04 | 4 |
02 | 05 | 7 |
02 | 06 | 6 |
このビューは、次のような質問に回答するために設計されています。部品01を構築するにはどの部品が必要でしょうか。
この定義で記されているとおり、データの中には100を超えるレベルが存在する可能性があるため、実際にはこの問合わせによって質問の回答は得られません。厳密に言うと、このリクエストが尋ねているのは次の質問です。部品01を構築するには、最大100のレベルがある中で、どの部品が必要でしょうか。
再帰的ビュー定義は、次のようになります。
CREATE RECURSIVE VIEW rpl (part, subpart, quantity, depth) AS ( SELECT root.part, root.subpart, root.quantity, 0 AS depth FROM partlist AS root WHERE root.part = '01' UNION ALL SELECT child.part, child.subpart, child.quantity, parent.depth + 1 FROM rpl AS parent, partlist AS child WHERE parent.subpart = child.part AND parent.depth <= 100);
部品01を構築するにはどの部品が必要かという質問に答える問合わせが、次のSELECTリクエストです。
SELECT part, subpart, quantity FROM rpl ORDER BY part, subpart, quantity;
この問合わせの結果セットは次のとおりです。
Part | Subpart | Quantity |
---|---|---|
01 | 02 | 2 |
01 | 03 | 3 |
01 | 04 | 4 |
02 | 05 | 7 |
02 | 06 | 6 |