Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle查询返回的管理器为';s未终止PL/SQL过程_Sql_Oracle_Stored Procedures_Plsql - Fatal编程技术网

Oracle查询返回的管理器为';s未终止PL/SQL过程

Oracle查询返回的管理器为';s未终止PL/SQL过程,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,我目前正在重新编写一个查询,并想即兴修改它 我的网站结构如下: 部门: 可达到的最高水平 员工视图: 包含所有员工相关信息的视图 服务范围组别: 系主任 服务范围: 服务区组的子项 服务区表: 包含服务区域的表 服务区员工: 包含与服务区域表的员工关系的表 每个部门、服务区组和服务区都有一名经理。 查询当前返回活动人员(staff)和经理(MGR)主序列。 它通过使用一个函数来实现这一点,该函数将查询当前员工序列是否抛出一个未找到数据异常 调用的函数: FUNCTION GETSERVICEAR

我目前正在重新编写一个查询,并想即兴修改它

我的网站结构如下:

部门:

可达到的最高水平

员工视图:

包含所有员工相关信息的视图

服务范围组别:

系主任

服务范围:

服务区组的子项

服务区表:

包含服务区域的表

服务区员工:

包含与服务区域表的员工关系的表

每个部门、服务区组和服务区都有一名经理。 查询当前返回活动人员(staff)和经理(MGR)主序列。 它通过使用一个函数来实现这一点,该函数将查询当前员工序列是否抛出一个未找到数据异常

调用的函数:

FUNCTION GETSERVICEAREAMGREMPSEQ(   ARG_EMP_SEQ NUMBER,
                                    ARG_POS_SEQ NUMBER,
                                    ARG_FLAG CHAR
                                ) RETURN NUMBER
    IS
        INTOUTPUT NUMBER;
BEGIN

BEGIN
SELECT DECODE(ARG_FLAG, 'E', ARG_EMP_SEQ, VS.POSITION_SEQ) INTO INTOUTPUT FROM SCHEMA.EMPLOYEE_VIEW VS WHERE VS.EMPLOYEE_SEQ = ARG_EMP_SEQ
AND VS.TERMINATION_DATE IS NULL;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        BEGIN

            SELECT DECODE(ARG_FLAG, 'E', VS.EMPLOYEE_SEQ, ARG_POS_SEQ)  INTO INTOUTPUT FROM SCHEMA.EMPLOYEE_VIEW VS WHERE VS.POSITION_SEQ = ARG_POS_SEQ
            AND VS.TERMINATION_DATE IS NULL AND ROWNUM=1;

                EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    INTOUTPUT := -1;

        END;

     WHEN OTHERS THEN
        INTOUTPUT := -1;

END;
RETURN INTOUTPUT;
END;
如果找不到数据的异常也抛出异常,那么它将与该服务区域的任何人都不匹配


这可以在没有函数的单个查询中完成吗?

问题2和3与S.O无关,您应该删除它们。对于问题1,添加一些样本数据和预期输出,并且记住,只有纯文本格式,没有图像。您可能可以使用
where(vs.employee_seq=arg_emp_seq或vs.position_seq=arg_pos_seq)
组合这两个查询,添加
order by
,以确保首先返回首选匹配项,和过滤器以仅获取第一行(执行此操作的技术因Oracle版本而异)。