函数和光标帮助ORACLE PL / SQL

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

试图获得此输出:

enter image description here

   SELECT E.ID_EMPLEADO ,E.APEMPPAT  , E.ID_JEFE   
     FROM EMPLEADOS E
     WHERE E.ID_SUCURSAL=4
     CONNECT BY PRIOR E.ID_EMPLEADO = E.ID_JEFE ;

具有此功能

    CREATE OR REPLACE FUNCTION EMPLO_FUN
(V_EMPL_SUC IN EMPLEADOS.ID_SUCURSAL%TYPE) 
RETURN VARCHAR2
IS
    V_NEMP_HASR EMPLEADOS.ID_EMPLEADO%TYPE;
    V_DEP_HASR  EMPLEADOS.APEMPPAT%TYPE;
    V_JURIS_HASR EMPLEADOS.ID_JEFE%TYPE;
CURSOR C1
IS 
   SELECT E.ID_EMPLEADO ,E.APEMPPAT, E.ID_JEFE  
     INTO  V_NEMP_HASR, V_DEP_HASR, V_JURIS_HASR 
     FROM EMPLEADOS E
     WHERE E.ID_SUCURSAL=V_EMPL_SUC
     CONNECT BY PRIOR E.ID_EMPLEADO = E.ID_JEFE ;
   BEGIN

   OPEN c1;
    FETCH c1 INTO V_NEMP_HASR, V_DEP_HASR, V_JURIS_HASR;


   CLOSE c1;
   RETURN V_NEMP_HASR;
    RETURN V_DEP_HASR;
    RETURN V_JURIS_HASR;
    END;

 SELECT EMPLO_FUN (4) FROM DUAL;

[我知道函数大多数返回一个值搜索,发现我可以使用游标获取多个值,但是我需要帮助,我认为缺少一些循环语句

database oracle plsql cursors
1个回答
0
投票

在查询中,您将返回VARCHAR2,该结果将仅返回一个值。相反,您应该返回SYS_REFCURSOR

CREATE OR REPLACE FUNCTION EMPLO_FUN (V_EMPL_SUC IN EMPLEADOS.ID_SUCURSAL%TYPE) 
RETURN SYS_REFCURSOR
AS
    V_MYRESULT SYS_REFCURSOR;
BEGIN
    OPEN V_MYRESULT FOR
        SELECT E.ID_EMPLEADO ,E.APEMPPAT, E.ID_JEFE  
        FROM EMPLEADOS E
        WHERE E.ID_SUCURSAL=V_EMPL_SUC
        CONNECT BY PRIOR E.ID_EMPLEADO = E.ID_JEFE ;

RETURN V_MYRESULT;
END;

然后SELECT EMPLO_FUN (4) FROM DUAL;应该会给您预期的结果。

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