在Oracle中,我們可以使用遞歸公用表表達式(Recursive Common Table Expression,簡稱CTE)來編寫遞歸SQL代碼
首先,創建一個示例表,用于存儲員工及其下屬關系:
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
manager_id NUMBER
);
插入一些示例數據:
INSERT INTO employees (id, name, manager_id) VALUES (1, 'Alice', NULL);
INSERT INTO employees (id, name, manager_id) VALUES (2, 'Bob', 1);
INSERT INTO employees (id, name, manager_id) VALUES (3, 'Charlie', 1);
INSERT INTO employees (id, name, manager_id) VALUES (4, 'David', 2);
INSERT INTO employees (id, name, manager_id) VALUES (5, 'Eva', 2);
接下來,編寫遞歸SQL代碼,查詢指定員工及其所有下屬:
WITH RECURSIVE employee_hierarchy AS (
-- 基本情況:找到指定的員工
SELECT id, name, manager_id
FROM employees
WHERE id = :target_employee_id
UNION ALL
-- 遞歸情況:找到下屬員工
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN employee_hierarchy eh ON e.manager_id = eh.id
)
SELECT * FROM employee_hierarchy;
在這個示例中,:target_employee_id
是一個參數,表示要查詢的員工ID。你可以將其替換為實際要查詢的員工ID。
這個遞歸CTE首先查找指定的員工(基本情況),然后遞歸地查找該員工的所有下屬(遞歸情況)。最后,從CTE中選擇所有結果。