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

SYS_REFCURSOR is returning all the rows from table without considering the IN parameter

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

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,而不是输入参数,here 您会发现更多内容;这样,您的 where 条件类似于 a=a.

更改参数名称以区别于table列:

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;

这是一个很好的做法,在您的代码中始终知道您是否正在处理输入参数、局部变量、列等等