我不知道我應該如何在 oracle 中實作它,這對我來說似乎是遞回。我有這張桌子
| EMPLOYEES |
-------------------
| employee_id |
-------------------
| manager_id |
___________________
我想獲得特定員工的所有直接和間接下屬的數量(以他的 id 作為引數)。更具體地說,每個員工(除了1)都有一個經理,但是,x可能是員工的經理b,員工b可能是員工的經理c,因此c也是員工的下屬x。到現在為止,我只能想出一個員工 ID 串列并批量收集下屬的第一波“浪潮”
CREATE OR REPLACE TYPE subordinates AS VARRAY(10) OF NUMBER(4);
/
DECLARE list subordinates;
CREATE OR REPLACE FUNCTION f_sub(v_id employees.employee_id%type) RETURN NUMBER IS
e_count number;
BEGIN
SELECT employee_id BULK COLLECT INTO list
FROM EMPLOYEES
WHERE manager_id = v_id;
return list.count;
end;
uj5u.com熱心網友回復:
您可以使用這樣的查詢來獲取直接或間接向經理報告的所有員工的數量:
SELECT COUNT (*) - 1 AS number_of_subordinates
FROM EMPLOYEES
CONNECT BY PRIOR employee_id = manager_id
START WITH employee_id = v_id;
該查詢需要從 中減去 1,COUNT(*)因為該查詢將回傳您作為查詢行之一傳遞的 employee_id。
此查詢將回傳...
- -1 如果 v_id (employee_id) 不存在
- 0 如果 v_id 存在,但沒有員工向該員工報告
- 1 向該員工報告的員工人數
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389861.html
上一篇:如何在C#中同時播放多個聲音?
