Irv*_*Dua 0 oracle plsql stored-procedures

请帮助我摆脱这种情况
我必须创建一个函数来检索给定员工的经理名称.(我试图加入emp表来实现这一点,但不确定.)另外,我需要编写一个SQL select语句,该语句使用该函数生成员工编号和名称列表以及他们的经理名称
谢谢
正如您所指出的,解决方案是将emp表与自身连接起来.
CREATE FUNCTION fn_get_manager(p_empno IN NUMBER)
RETURN VARCHAR2
IS manager VARCHAR2;
BEGIN
SELECT mgr.name
INTO manager
FROM emp e, emp mgr
WHERE e.mgr = mgr.empno
AND e.empno = p_empno;
RETURN(manager);
END;
Run Code Online (Sandbox Code Playgroud)
此查询可以包装在用户定义的函数中,其中@employee变量成为参数.
要返回员工列表,可以在select语句中调用该函数
SELECT e.empno, e.name, fn_get_manager(e.empno)
FROM emp e
Run Code Online (Sandbox Code Playgroud)
虽然这种结构很有效,但对于这样一个简单的请求来说,这是一种可怕的方式.将对emp表中的每个记录执行该函数,与简单的join语句相比,结果将非常慢.
SELECT e.empno, e.name, mgr.name
FROM emp e,emp mgr
WHERE e.mgr = mgr.empno (+)
Run Code Online (Sandbox Code Playgroud)
我在这里使用左连接来处理"大老板"的边缘情况,其中没有经理本人.
编辑:为oracle语法更新了一些查询