G-4340: Always use a NUMERIC FOR loop to process a dense array.
Reason
It is easier for the reader to see that the complete array is processed.
Since an exit
statement is similar to a goto
statement, it should be avoided whenever possible.
Example (bad)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | declare
type t_employee_type is varray(10) of employee.employee_id%type;
t_employee t_employee_type;
k_himuro constant integer := 118;
k_livingston constant integer := 177;
k_min_value constant simple_integer := 1;
k_increment constant simple_integer := 1;
i pls_integer;
begin
t_employee := t_employee_type(k_himuro, k_livingston);
i := k_min_value;
<<process_employees>>
loop
exit process_employees when i > t_employee.count();
sys.dbms_output.put_line(t_employee(i));
i := i + k_increment;
end loop process_employees;
end;
/
|
Example (good)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | declare
type t_employee_type is varray(10) of employee.employee_id%type;
t_employee t_employee_type;
k_himuro constant integer := 118;
k_livingston constant integer := 177;
begin
t_employee := t_employee_type(k_himuro, k_livingston);
<<process_employees>>
for i in 1..t_employee.count()
loop
sys.dbms_output.put_line(t_employee(i));
end loop process_employees;
end;
/
|