Cursor Expressions
Nested dataset, evaluates to a cursor.
Example:
DECLARE
CURSOR cur_dept_info IS
SELECT dept_id,
CURSOR(SELECT emp_id -- cursor expression
FROM employee
WHERE emp_dept_id = dept_id) emp_info
FROM departments;
l_dept_id departments.dept_id%TYPE;
rc_emp_info SYS_REFCURSOR; -- weakly-typed refcursor provided by Oracle
l_emp_id employee.emp_id%TYPE;
BEGIN
OPEN cur_dept_info;
LOOP
FETCH cur_dept_info INTO l_dept_id, rc_emp_info;
EXIT WHEN cur_dept_info%NOTFOUND;
LOOP
FETCH rc_emp_info INTO l_emp_id;
EXIT WHEN rc_emp_info%NOTFOUND;
dbms_output.PUT_LINE('l_emp_id: ' || l_emp_id);
END LOOP;
END LOOP;
CLOSE cur_dept_info;
END;