PL/SQL & SQL CODING GUIDELINE 43 - Use 1 as lower boundary and COUNT() as upper boundary when looping over a dense array

條款四十三,遍巡 dense array 時,建議使用 1 當做 lower boundary,使用 COUNT() 當做 upper boundary。


像是下面這樣的程式,使用了 FIRST() 與 LAST() 做為遍巡走訪的條件,dense array 不為空時可以正常運作,但當 dense array 為空時則會發生錯誤。

1
2
3
4
5
6
7
8
9
DECLARE 
t_employees t_employee_type := t_employee_type();
BEGIN
<<process_employees>>
FOR i IN t_employees.FIRST()..t_employees.LAST()
LOOP

END LOOP process_employees;
END;


簡單的解決方式可以加判斷 dense array 是否為空。

1
2
3
4
5
6
7
8
9
10
11
12
DECLARE 
t_employees t_employee_type := t_employee_type();
BEGIN
<<process_employees>>
IF t_employees IS NOT EMPTY
THEN
FOR i IN t_employees.FIRST()..t_employees.LAST()
LOOP

END LOOP process_employees;
END IF;
END;


但建議的方式是改以 1 與 COUNT() 做為遍巡走訪的條件。

1
2
3
4
5
6
7
8
9
DECLARE 
t_employees t_employee_type := t_employee_type();
BEGIN
<<process_employees>>
FOR i IN 1..t_employees.COUNT()
LOOP

END LOOP process_employees;
END;