此查询检查给定经理下的所有员工以及级别,经理ID,经理名称。运行此命令时,level 1的管理员名称列包含null,这基本上意味着它们直接位于输入的manager之下。我如何在级别1的“经理名称”列中获取输入的经理的名称。
我正在使用Oracle 11g。
select id,(firstname||' '||lastname) as name,managerid,
nvl(prior (firstname||' '||lastname),'want user input shown here') as manager_name, level
from employee
connect by prior id = managerid
start with managerid=(select id from employee where firstname = '&firstname' and
lastname='&lastname') order by level;
我在示例中使用了stock scott.emp表,您应该能够相应地对其进行修改:
WITH starter AS (
SELECT b.empno, b.ename
FROM scott.emp b
WHERE b.ename = 'KING'
)
SELECT a.ename,
NVL(PRIOR(a.ename), (SELECT s.ename FROM starter s))
FROM scott.emp a
CONNECT BY a.mgr = PRIOR (a.empno)
START WITH a.mgr = (SELECT s.empno FROM starter s);
我承认,这有点麻烦,但是可以完成工作。
用户输入的意思是名字和姓氏,这里是替换变量。
您可以如下所示使用&&
。
select id,(firstname||' '||lastname) as name,managerid,
nvl(prior (firstname||' '||lastname),'&&firstname &&lastname') as manager_name, level
from employee
connect by prior id = managerid
start with managerid=(select id from employee where firstname = '&&firstname' and
lastname='&&lastname') order by level;
干杯!