У меня есть ниже курсора, который я использую в 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.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;
UPDATE: - @APC решение работало. Идя с этим решением, если я пользователь хочет передать массив EmpId вместо единого Id я попытался ниже
Сначала создал тип массива с create type p_employee_arr as table of number
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;
Но все-таки вернуть полный набор результатов, если я предоставить один элемент в массиве
Ваша модель данных кажется немного странной - обычно сотрудники назначаются на отдел, а не наоборот. – APC
Я просто приведу пример, чтобы провести аналогию с проблемой, с которой я столкнулся. Да, это не так. Но это не проблема здесь – user3198603