如何在Oracle SQL中将用户输入作为NVL()函数的替代输出?

问题描述 投票:0回答:2

此查询检查给定经理下的所有员工以及级别,经理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;
sql database oracle user-input nvl
2个回答
0
投票

我在示例中使用了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);

我承认,这有点麻烦,但是可以完成工作。


0
投票

用户输入的意思是名字和姓氏,这里是替换变量。

您可以如下所示使用&&

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;

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.