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