函数和游标 HELP ORACLE PL/SQL
Function & Cursor HELP ORACLE PL/SQL
正在尝试获取此输出:
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;
我知道函数主要是return一个值搜索发现我可以使用游标来获取多个值,但我需要帮助,我认为缺少一些循环语句
在您的查询中,您 returning VARCHAR2
这将 return 只有一个值。相反,你应该 return 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;
应该会给你预期的结果。
正在尝试获取此输出:
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;
我知道函数主要是return一个值搜索发现我可以使用游标来获取多个值,但我需要帮助,我认为缺少一些循环语句
在您的查询中,您 returning VARCHAR2
这将 return 只有一个值。相反,你应该 return 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;
应该会给你预期的结果。