我遇到了一个奇怪的问题。
PROCEDURE USL_EMPLOYEEBYID (
EMPLOYEE_ID IN NUMBER,
EMPIDCURSOR OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN EMPIDCURSOR FOR
SELECT emp.employee_id,emp.employee_name,emp.present_address,emp.permanent_address,emp.status
FROM Employee_Info emp
WHERE emp.employee_id = EMPLOYEE_ID;
END;
这个过程应该在输入员工Id时给我一个员工。但它正在返回所有员工。
我在这里做错了什么?
在您的查询中,Oracle将EMPLOYEE_ID
解释为列EMPLOYEE_ID
,而不是输入参数,在这里您会发现更多;这样,您的where
条件类似于a=a
。
更改参数名称,以将其与表列区分开来:
PROCEDURE USL_EMPLOYEEBYID (
p_EMPLOYEE_ID IN NUMBER,
po_EMPIDCURSOR OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN po_EMPIDCURSOR FOR
SELECT emp.employee_id,emp.employee_name,emp.present_address,emp.permanent_address,emp.status
FROM Employee_Info emp
WHERE emp.employee_id = p_EMPLOYEE_ID;
END;
这是一个很好的做法,在你的代码中总是知道你是在处理一个输入参数,一个局部变量,一个列等等