Взгляните на PL / SQL Collections . Вы можете создать коллекцию записи PL / SQL, где запись определяется как% ROWTYPE вашей таблицы. Затем вы загружаете эту таблицу и выполняете над ней операции.
Например:
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, employee_name from employees;
TYPE employeeArrayType IS TABLE OF a_cur%ROWTYPE;
employeeArray employeeArrayType;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor BULK COLLECT INTO employeeArray LIMIT 100;
EXIT WHEN emp_cursor%NOTFOUND;
END LOOP;
CLOSE emp_cursor;
-- Now you can do work with employeeArray
END;
Код объявляет мой курсор и коллекцию, затем загружает коллекцию, используя процесс FETCH..BULK COLLECT в цикле (что желательно при больших объемах данных).
Тем не менее, комментарий Codo применяется здесь - гораздо проще, если вы фильтруете и сортируете свои данные как часть предложения WHERE и предложения ORDER BY вашего запроса SQL. Когда у вас есть движок базы данных, не так много случаев, когда было бы лучше выполнять операции над множествами на процедурном языке. Некоторым процессам ETL это может потребоваться, но на ваш вопрос я действительно рекомендовал бы выполнить вашу работу в SQL, а затем работать с окончательным набором результатов.
При этом сортировка коллекций записей PL / SQL не так проста, как хотелось бы. Для обзора способов сортировки коллекции, загляните в Технологический блог AMIS (и здесь для части 2).