Associative Arrays Oracle PL/SQL

В этом учебном материале вы узнаете, как использовать Associative Arrays (ассоциативный массив) в Oracle PL/SQL с синтаксисом и примерами.

Описание

В Oracle PL/SQL Associative Arrays, также известные как индексные таблицы, в которых для значений индекса используя произвольные числа и строки. Associative Arrays - это набор пар ключ-значение, где каждый ключ уникален и используется для нахождения соответствующего значения в массиве.

Синтаксис

Синтаксис для определения, а затем объявление переменной типа Associative Arrays в Oracle PL/SQL.

TYPE type_assoc_arr IS TABLE OF element_type [NOT NULL]
INDEX BY [PLS_INTEGER | BINARY_INTEGER | VARCHAR2(size_limit)];
INDEX BY key_type;
var_type type_assoc_arr;

Параметры или аргументы

type_assoc_arr – имя типа Associative Arrays
element_type - любой тип данных PL/SQL, за исключением REF CURSOR
key_type тип индекса, может быть числовым: PLS_INTEGER или BINARY_INTEGER, это может быть также VARCHAR2 или один из его подтипов VARCHAR, STRING или LONG.
var_type - имя переменной типа Associative Arrays

Примечание

  • Типы RAW, LONG RAW, ROWID, CHAR и CHARACTER не разрешены в качестве ключей для Associative Arrays.
  • Associative Arrays могут хранить данные с использованием значения первичного ключа в качестве индекса, где значения ключа не являются последовательными.
  • Когда вы ссылаетесь на элемент Associative Arrays, который использует ключ на основе VARCHAR2, вы можете использовать другие типы, такие как DATE или TIMESTAMP, если они могут быть преобразованы в VARCHAR2 с помощью функции TO_CHAR.
  • Не используйте TO_CHAR (SYSDATE) в качестве ключа.

Примеры

Рассмотрим некоторые примеры чтобы понять как работать с ассоциативным массивом в Oracle PL/SQL.

Associative Arrays, индексированный VARCHAR2

В этом примере мы определили тип ассоциативного массива population, индексированного строкой, объявили переменную этого типа city_population, заполнили переменную тремя элементами, изменили значение одного элемента и напечатали значения (в порядке сортировки, а не в порядке создания). (FIRST и NEXT - методы коллекций).

Associative Arrays, индексированный целым числом

В этом примере определяется тип ассоциативного массива, индексированный PLS_INTEGER, и функция возвращает ассоциативный массив.

Associative Arrays подходит для:

Относительно небольшая таблица поиска, которая может быть построена в памяти каждый раз, когда вы вызываете подпрограмму или инициализируете пакет, который ее объявляет.
Передача коллекций на сервер базы данных и обратно.

Заметка:

Вы не можете объявить тип Associative Arrays на уровне схемы. Поэтому, чтобы передать переменную Associative Arrays в качестве параметра в отдельную сохраненную подпрограмму, вы должны объявить тип этой переменной в спецификации пакета. Это делает тип доступным для вызываемой подпрограммы (которая объявляет формальный параметр этого типа) и вызывающей подпрограммы или анонимного блока (который объявляет и передает переменную этого типа)
Например.

Передача ассоциативного массива в автономную подпрограмму

Итог

Самый эффективный способ передачи коллекций на сервер базы данных и обратно - использовать Associative Arrays с оператором FORALL или BULK COLLECT.
Associative Arrays предназначен для временного хранения данных. Чтобы сделать Associative Arrays постоянным для жизни сеанса базы данных, объявите его в спецификации пакета и заполните его в теле пакета.