oracle sql递归代码如何编写

avatar
作者
筋斗云
阅读量:0

在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中选择所有结果。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!