Я пытаюсь заполнить коллекцию массовым сбором .. предложение limit. Код работает, если я использую обычный BULK COLLECT без ограничений. Но с BULK COLLECT .. LIMIT l oop коллекция не заполняется. Также я не понимаю, почему collectionname.COUNT = 0, когда больше нет значений для извлечения.
Код указан ниже:
DECLARE
c_limit PLS_INTEGER := 5;
CURSOR employees_cur
IS
SELECT employee_id
FROM employees;
TYPE employee_ids_t IS TABLE OF
employees.employee_id%TYPE;
l_employee_ids employee_ids_t;
BEGIN
OPEN employees_cur;
LOOP
FETCH employees_cur
BULK COLLECT INTO l_employee_ids
LIMIT c_limit;
dbms_output.put_line ('after bulk collect count '||l_employee_ids.COUNT);
dbms_output.put_line ('after bulk collect first '||l_employee_ids.FIRST);
dbms_output.put_line ('after bulk collect last '||l_employee_ids.LAST);
EXIT WHEN l_employee_ids.COUNT = 0;
END LOOP;
CLOSE employees_cur;
dbms_output.put_line ('Outside loop: ');
dbms_output.put_line ('after bulk collect count '||l_employee_ids.COUNT);
dbms_output.put_line ('after bulk collect first '||l_employee_ids.FIRST);
dbms_output.put_line ('after bulk collect last '||l_employee_ids.LAST);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line ('Error: '||SQLERRM);
END;
Нет исключений. За пределами l oop collection.COUNT показывает 0, а FIRST и LAST - NULL. Я не понимаю, что пошло не так. Код почти дословный (за исключением put_lines) из примера Oracle в блоге. https://blogs.oracle.com/oraclemagazine/bulk-processing-with-bulk-collect-and-forall
(листинг 6: выборка до указанного числа строк)
Я нахожусь на 12,1 Oracle
Внутри l oop для каждой итерации, COUNT = LIMIT value, и FIRST равен 1, а LAST = COUNT являются напечатанными значениями.