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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | declare
cursor c_employee is
select employee_id, first_name, last_name
from employee;
l_employee_id employee.employee_id%type;
l_first_name employee.first_name%type;
l_last_name employee.last_name%type;
begin
open c_employee;
fetch c_employee into l_employee_id, l_first_name, l_last_name;
<<process_employee>>
while c_employee%found
loop
-- do something with the data
fetch c_employee into l_employee_id, l_first_name, l_last_name;
end loop process_employee;
close c_employee;
end;
/
|
Example (good)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | declare
cursor c_employee is
select employee_id, first_name, last_name
from employee;
r_employee c_employee%rowtype;
begin
open c_employee;
fetch c_employee into r_employee;
<<process_employee>>
while c_employee%found
loop
-- do something with the data
fetch c_employee into r_employee;
end loop process_employee;
close c_employee;
end;
/
|