Главная > oracle, SQL > Коллекции в PL/SQL


Коллекции в PL/SQL

Коллекции

Коллекцией называется упорядоченная группа элементов одного типа.

Язык PL/SQL поддерживает три вида коллекций

Плюсы использования коллекций

  • Кеширование статичной информации
  • Отслеживание элементов данных для спец.обработки
  • Хранение списков непосредственно в столбцах таблицы

 

Какой тип коллекций лучше использовать

    • Если необходимо использовать разреженный индексированный список, фактически подходит только один вариант — ассоциативный массив. Можно, конечно, и выделить память, и затем удалить элементы вложенной таблицы, соответствующей переменной, однако это неэффективно во всех случаях, кроме самых маленьких коллекций.

 


    • Если в PL/SQL-приложении требуется отрицательная индексация, необходимо использовать ассоциативные массивы.

    • Если используется Oracle Database 10g и считается полезным выполнять высокоуровневый набор операций с коллекциями, выберите вложенные таблицы вместо ассоциативных массивов.

    • Если надо потребовать ограничения количества строк коллекции, используйте VARRAY.

    • Если предполагается хранить большое количество постоянных данных в столбце таблицы в виде коллекции, вариант только один – это вложенная таблица. Тогда Oracle Database будет физически использовать отдельную таблицу для хранения коллекции, поэтому её рост ничем не ограничен.

    • Если требуется сохранить порядок элементов, хранимых в столбце коллекции, а набор данных предполагается небольшим, используйте VARRAY. Что значит «небольшой»? Это объём данных, размещаемых в одном блоке базы данных.

  • Вот несколько других параметров, когда VARRAY — массив переменной длины более предпочтителен: не надо беспокоиться об удалении данных из середины набора данных; данные имеют верхнюю границу индексирования; а также, если предполагается, главным образом, извлекать всю коллекцию целиком.

 

Псевдофункции коллекций


THE — представляет значение одного столбца коллекции одной стороки таблицы в виде виртуальной таблицы

Подготовим данные для примера

SQL> CREATE TYPE XX_TYPE_ORDERS IS TABLE OF VARCHAR2(100);
  2  /

Type created
SQL> CREATE TABLE XX_ORDER (ID NUMBER, ORDER_NAME XX_TYPE_ORDERS)
  2     NESTED TABLE ORDER_NAME STORE AS NESTED_ORDERS;

Table created
SQL> INSERT INTO XX_ORDER VALUES (1, XX_TYPE_ORDERS('ORDER 1','ORDER 2','ORDER 3'))
  2  /

1 row inserted
SQL> INSERT INTO XX_ORDER VALUES (2, XX_TYPE_ORDERS('ORDER 21','ORDER 22','ORDER 23'))
  2  /

1 row inserted

SQL> SELECT * FROM XX_ORDER;

ID         ORDER_NAME
---------- ----------
1          XX_TYPE_ORDERS('ORDER 1', 'ORDER 2', 'ORDER 3')
2          XX_TYPE_ORDERS('ORDER 21', 'ORDER 22', 'ORDER 23')

Пример использования псевдофункции THE

SQL> SELECT VALUE(T) FROM THE (SELECT ORDER_NAME FROM XX_ORDER WHERE ID=1) T;

VALUE(T)
---------------
ORDER 1
ORDER 2
ORDER 3

CAST — преобразует коллекцию одного типа в коллекцию другого типа

MULTISET — представляет таблицу БД в виде коллекции

SQL> CREATE TYPE XX_EMP IS TABLE OF VARCHAR2(10);
  2  /

Type created
SQL> SELECT CAST(
              MULTISET(SELECT ENAME FROM SCOTT.EMP WHERE DEPTNO = 10) AS XX_EMP
                ) as val FROM DUAL;

VAL
-----------------------------------
XX_EMP('CLARK','KING','MILLER')

TABLE — представляет коллекцию  в виде таблицы БД

SQL> SELECT T1.ID,T2.* FROM XX_ORDER T1, TABLE(T1.ORDER_NAME) T2;

        ID COLUMN_VALUE
---------- ------------------
         1 ORDER 1
         1 ORDER 2
         1 ORDER 3
         2 ORDER 21
         2 ORDER 22
         2 ORDER 23

6 rows selected

Похожие записи:

Categories: oracle, SQL Tags: ,
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.