SYS_REFCURSOR返回表中的所有行,而不考虑IN参数



我遇到了一个奇怪的问题。

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;

这是一个很好的做法,在你的代码中总是知道你是在处理一个输入参数,一个局部变量,一个列等等

最新更新