在Oracle中,可以使用連接查詢和遞歸子查詢等方式來實現遞歸查詢所有子節點。下面是使用遞歸子查詢實現的示例:
CREATE TABLE employee (
id NUMBER,
parent_id NUMBER
);
INSERT INTO employee (id, parent_id)
VALUES (1, NULL);
INSERT INTO employee (id, parent_id)
VALUES (2, 1);
INSERT INTO employee (id, parent_id)
VALUES (3, 1);
INSERT INTO employee (id, parent_id)
VALUES (4, 2);
WITH recursive_query (id, parent_id) AS (
SELECT id, parent_id FROM employee WHERE id = 1 -- 指定根節點的id
UNION ALL
SELECT e.id, e.parent_id FROM employee e
JOIN recursive_query r ON e.parent_id = r.id
)
SELECT * FROM recursive_query;
在上述示例中,使用遞歸子查詢來查詢employee表中id為1的節點的所有子節點。遞歸子查詢部分使用UNION ALL連接了兩個SELECT語句,第一個SELECT語句返回了指定id的節點,第二個SELECT語句通過JOIN連接遞歸查詢結果集和原始表,實現了遞歸查詢。