Cursor FOR Loops
Compact way of looping through records in a cursor that automatically opens and closes the cursor for you.
Example:
DECLARE
CURSOR cur_get_employees IS
SELECT emp_id,
emp_sal * 0.10 bonus
FROM employee;
BEGIN
FOR cur_get_employees_var IN cur_get_employees LOOP
dbms_output.PUT_LINE(cur_get_employees_var.emp_id);
dbms_output.PUT_LINE(cur_get_employees_var.bonus);
END LOOP;
END;
Nested cursor example:
DECLARE
CURSOR cur_get_dept_info(p_rownum NUMBER) IS
SELECT dept_id
FROM departments
WHERE ROWNUM <= p_rownum;
CURSOR cur_get_emp_info(p_dept_id employee.emp_dept_id%TYPE) IS
SELECT emp_name
FROM employee
WHERE emp_dept_id = p_dept_id;
BEGIN
<<dept_loop>>
FOR cur_get_dept_info_var IN cur_get_dept_info(2) LOOP
dbms_output.PUT_LINE('Dept id: ' || cur_get_dept_info_var.dept_id);
<<emp_loop>>
FOR cur_get_emp_info_var IN cur_get_emp_info(cur_get_dept_info_var.dept_id) LOOP
dbms_output.PUT_LINE('Emp Name: ' || cur_get_emp_info_var.emp_name);
END LOOP emp_loop;
END LOOP dept_loop;
END;