Приведенная ниже логика не дает требуемого результата
Дикая догадка: вы получаете только двенадцать строк.Это знакомая ошибка с предложением LIMIT.Эта строка является проблемой:
EXIT WHEN c_get_employee%NOTFOUND;
У вас есть 14 записей в EMP: ограничение 3 означает, что вы собираете четыре набора записей.Последний FETCH собирает только 2 записи.PL / SQL интерпретирует это как NOTFOUND
.Решение состоит в том, чтобы проверить размер коллекции:
EXIT WHEN l_employee.count() = 0;
Я хочу загрузить все данные в коллекцию и закрыть курсор. После этого я хочу открыть коллекцию и использовать данные длябизнес-логика
Это не то, как работает BULK COLLECT ... LIMIT.Смысл предложения LIMIT заключается в том, чтобы ограничить количество записей, извлекаемых за один раз.Это необходимо делать, когда запрашиваемые данные слишком велики для обработки за один раз.Коллекции PL / SQL - это структуры памяти, которые хранятся в распределении памяти сеанса: если они становятся слишком большими, они взрывают PGA.(Определение «слишком большой» будет зависеть от того, как ваш администратор БД настроил PGA.)
Итак, если у вас небольшой набор результатов, отбросьте предложение LIMIT и заполните коллекцию за одну выборку.Но если у вас достаточно данных, чтобы потребовать предложение LIMIT, вам нужно включить цикл бизнес-логики в цикл выборки.