【发布时间】:2016-11-28 01:17:39
【问题描述】:
我已执行以下操作来创建一个存储过程,该过程返回 EMPLOYEE 表中员工的经理:
[另外:REPORTSTO 是一个 NUMBER 值,包含员工经理的 ID]
create or replace PROCEDURE MANAGER_OF_EMPLOYEE
(
THE_EMPLOYEEID IN NUMBER
)
AS
TEMP VARCHAR2(20);
TEMP2 VARCHAR2(20);
TEMP3 VARCHAR2(20);
TEMP4 VARCHAR2(20);
BEGIN
SELECT MGR.FIRSTNAME, MGR.LASTNAME, EMP.FIRSTNAME, EMP.LASTNAME INTO TEMP, TEMP2, TEMP3, TEMP4
FROM EMPLOYEE EMP
LEFT OUTER JOIN EMPLOYEE MGR
ON EMP.EMPLOYEEID = MGR.REPORTSTO
WHERE EMP.EMPLOYEEID = THE_EMPLOYEEID AND EMP.REPORTSTO = MGR.EMPLOYEEID;
DBMS_OUTPUT.PUT_LINE(TEMP || ' ' || TEMP2 || ' IS THE MANAGER OF ' || TEMP3 || ' ' || TEMP4);
END MANAGER_OF_EMPLOYEE;
无论我将什么作为参数,我总是得到“Andrew Adams 是 Andrew Adams 的经理”。 Andrew Adams 是 EMPLOYEE 表中的第一行,并且是最高经理,所以从技术上讲,他是他自己的经理。但是为什么不管我输入什么,我都会得到相同的输出呢?
【问题讨论】:
-
我认为你的 ON 条件是错误的。在 Emp.Employee=Mgr.ReportsTo 和后来的 WHERE 你有 Emp.ReportsTo=Mgr.EmployeeID。
标签: sql oracle stored-procedures plsql