G-4325: Never reuse labels in inner scopes.
Major
Maintainability, Reliability, Testability
Reason
Reusing labels inside the scope of another label with the same name leads to confusion, less chance of understanding the code, and could lead to bugs (for example if using exit my_label
exits at a different nesting level than expected.)
Example (bad)
1
2
3
4
5
6
7
8
9
10
11
12 | <<my_label>>
declare
co_min_value constant simple_integer := 1;
co_max_value constant simple_integer := 8;
begin
<<my_label>>
for i in co_min_value..co_max_value
loop
sys.dbms_output.put_line(i);
end loop my_label;
end my_label;
/
|
Example (good)
1
2
3
4
5
6
7
8
9
10
11
12 | <<output_values>>
declare
co_min_value constant simple_integer := 1;
co_max_value constant simple_integer := 8;
begin
<<process_values>>
for i in co_min_value..co_max_value
loop
sys.dbms_output.put_line(i);
end loop process_values;
end output_values;
/
|