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;
这是一个很好的做法,在您的代码中始终知道您是否正在处理输入参数、局部变量、列等等
我遇到了一个奇怪的问题。
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;
这是一个很好的做法,在您的代码中始终知道您是否正在处理输入参数、局部变量、列等等