Используйте коллекцию (которую вы можете создать с помощью CREATE TYPE ... AS TABLE OF ...
) или VARRAY
(например, встроенную VARRAY
s SYS.ODCI*LIST
) и BULK COLLECT INTO
:
CREATE PROCEDURE employee_project (
emp_id in EMPLOYEES.EMPLOYEE_ID%TYPE,
pro_ids out SYS.ODCINUMBERLIST,
pro_names out SYS.ODCIVARCHAR2LIST
)
IS
BEGIN
SELECT p.project_id,
p.project_name
BULK COLLECT INTO
pro_ids,
pro_names
FROM employees e
INNER JOIN departments d
ON ( e.department_id= d.department_id )
INNER JOIN projects p
ON ( p.department_id = d.department_id)
WHERE e.employee_id = emp_id;
END;
/
или просто вернуть курсор (без предложения INTO
):
CREATE PROCEDURE employee_project (
emp_id in EMPLOYEES.EMPLOYEE_ID%TYPE,
cur out SYS_REFCURSOR
)
IS
BEGIN
OPEN cur FOR
SELECT p.project_id,
p.project_name
FROM employees e
INNER JOIN departments d
ON ( e.department_id= d.department_id )
INNER JOIN projects p
ON ( p.department_id = d.department_id)
WHERE e.employee_id = emp_id;
END;
/