编写存储过程以进行查找

Irv*_*Dua 0 oracle plsql stored-procedures

在此输入图像描述

请帮助我摆脱这种情况

我必须创建一个函数来检索给定员工的经理名称.(我试图加入emp表来实现这一点,但不确定.)另外,我需要编写一个SQL select语句,该语句使用该函数生成员工编号和名称列表以及他们的经理名称

谢谢

Fil*_*Vos 5

正如您所指出的,解决方案是将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语法更新了一些查询