Oracle 构建游标查询本质上是动态的?
我在下面的游标中使用了PL/SQL函数,即getEmployeeInfoOracle 构建游标查询本质上是动态的?,oracle,plsql,cursor,Oracle,Plsql,Cursor,我在下面的游标中使用了PL/SQL函数,即getEmployeeInfo CURSOR employeeDepartment IS SELECT * FROM Employee LEFT OUTER JOIN Department ON Department.empID = Employee.ID WHERE Employee.STATE = 'Washington' ORDER BY Employee.Joinin
CURSOR employeeDepartment IS
SELECT *
FROM Employee
LEFT OUTER JOIN Department ON Department.empID = Employee.ID
WHERE Employee.STATE = 'Washington'
ORDER BY Employee.JoiningDate desc;
我需要修改getEmployeeInfo函数,以employeeId作为输入参数并附加到光标employeeDepartment
如果employeeId>0
我是PL/SQL编程新手。看起来我需要朝着REF-CURSOR的方向移动,但我不能准确地弥补它
因此,如果Employee.id>0,则光标查询应位于下方,否则应与上面相同
CURSOR employeeDepartment IS
SELECT *
FROM Employee
LEFT OUTER JOIN Department ON Department.empID = Employee.ID
WHERE Employee.STATE = 'Washington'
and Employee.id= 100
ORDER BY Employee.JoiningDate desc;
更新:-@APC解决方案有效。如果我的用户希望传递empId数组而不是我在下面尝试的单个Id,那么使用该解决方案
首先使用创建类型p\u employee\u arr作为数字表创建数组类型
CURSOR employeeDepartment (p_employee_arr IN num_array) IS
SELECT *
FROM Employee
LEFT OUTER JOIN Department ON Department.empID = Employee.ID
WHERE Employee.STATE = 'Washington'
and (Employee.id in (SELECT column_value FROM TABLE( p_employee_arr )) or p_employee_arr is null)
ORDER BY Employee.JoiningDate desc;
但如果我在数组中提供一个元素,它仍然会返回完整的结果集,我想您需要如下参数的游标
CURSOR employeeDepartment (employee_id_in IN number)
IS
SELECT *
FROM Employee
LEFT OUTER JOIN Department ON Department.empID = Employee.ID
WHERE Employee.STATE = 'Washington'
and
(case
when (employee_id_in > 0) and (Employee.id= employee_id_in) then 1
else 0
end) = 1
ORDER BY Employee.JoiningDate desc;
因此,您可以像这样打开光标
open employeeDepartment(100)
有关更多信息,请参考您的问题有点含糊不清,但我认为您希望在传递员工ID时限制结果集,否则您需要状态的所有记录
CURSOR employeeDepartment (p_employee_id in number) IS
SELECT *
FROM Employee
LEFT OUTER JOIN Department ON Department.empID = Employee.ID
WHERE Employee.STATE = 'Washington'
and ( p_employee_id = 0 or Employee.id= p_employee_id )
ORDER BY Employee.JoiningDate desc;
我只想在empId>0时附加and子句“and Employee.id=…”。在您的解决方案中,它总是会在
where
子句中附加conditionusecase
语句。您能在此提供示例吗?您的数据模型似乎有点奇怪-通常员工被分配到一个部门,而不是相反。我只是引用一个例子来从我所面临的问题中进行类比。是的,这可能是不对的。但这不关我的事,我只是在找这个。感谢我想要的一个小修改是用户正在传递empId的数组而不是单个empId,然后我想要这些特定的信息,否则得到所有。应该是…(p_arr_employee_id为null或employee.id in(p_arr_employee_id))