>-
條款四十三,遍巡 dense array 時,建議使用 1 當做 lower boundary,使用 COUNT() 當做 upper boundary。
像是下面這樣的程式,使用了 FIRST() 與 LAST() 做為遍巡走訪的條件,dense array 不為空時可以正常運作,但當 dense array 為空時則會發生錯誤。
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 是否為空。
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() 做為遍巡走訪的條件。
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;