Массивы в Oracle PL / SQL для хранения строк - PullRequest
2 голосов
/ 01 апреля 2011

Я пытаюсь выполнить что-то в Oracle / PLSQL, где я хочу выбрать некоторые вещи из БД с помощью курсора и сохранить их в массив строк, которые я смогу позже обработать. Искал в гугле но безрезультатно. Буду признателен за любую помощь здесь.

Что я имею в виду

  1. Используйте курсор для чтения БД
  2. хранить строки, которые вписывают определенный критерий в массив строк
  3. сортировка массива строк
  4. распечатать элементы в массиве строк, используя dbms_output.put_line

1 Ответ

7 голосов
/ 01 апреля 2011

Взгляните на 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...