G-3140: Try to use anchored records as targets for your cursors.
Major
Maintainability, Reliability
Reason
Using cursor-anchored records as targets for your cursors results enables the possibility of changing the structure of the cursor without regard to the target structure.
Example (bad)
DECLARE
CURSOR c_employees IS
SELECT employee_id, first_name, last_name
FROM employees;
l_employee_id employees.employee_id%TYPE;
l_first_name employees.first_name%TYPE;
l_last_name employees.last_name%TYPE;
BEGIN
OPEN c_employees;
FETCH c_employees INTO l_employee_id, l_first_name, l_last_name;
<<process_employees>>
WHILE c_employees%FOUND
LOOP
-- do something with the data
FETCH c_employees INTO l_employee_id, l_first_name, l_last_name;
END LOOP process_employees;
CLOSE c_employees;
END;
/
Example (good)
DECLARE
CURSOR c_employees IS
SELECT employee_id, first_name, last_name
FROM employees;
r_employee c_employees%ROWTYPE;
BEGIN
OPEN c_employees;
FETCH c_employees INTO r_employee;
<<process_employees>>
WHILE c_employees%FOUND
LOOP
-- do something with the data
FETCH c_employees INTO r_employee;
END LOOP process_employees;
CLOSE c_employees;
END;
/