Nested Tables Oracle PL/SQL

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

Описание

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

Синтаксис

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

TYPE nt_type IS TABLE OF element_type [NOT NULL];
var_nt nt_type;

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

nt_type - имя типа, используемое позже для объявления коллекций.
element_type - любой тип данных PL/SQL, за исключением: REF CURSOR
var_nt – переменная типа Nested Tables.

Примечание

  • Неинициализированная переменная вложенной таблицы - это нулевая коллекция.
  • Вы должны инициализировать его, либо пустым, либо присваивая ему значение, отличное от NULL.

Пример Nested Tables как локальный тип

Рассмотрим пример Oracle PL/SQL который определяет локальный тип вложенной таблицы Roster, объявляет переменную этого типа names (инициализирует ее конструктором) и определяет процедуру print_names, которая печатает Nested Tables. (В процедуре используются методы коллекций FIRST и LAST.) Пример вызывает процедуру три раза: после инициализации переменной, после изменения значения одного элемента и после использования конструктора для изменения значения всех элементов. После вызова второго конструктора вложенная таблица имеет только два элемента. Ссылка на элемент 3 вызовет ошибку ORA-06533.

В следующем примере определяется автономный хранимый тип вложенной таблицы, nt_type и автономная хранимая процедура для печати переменной этого типа print_nt. (В процедуре используются методы коллекций FIRST и LAST.) Анонимный блок объявляет переменную типа nt_type, инициализирует ее пустым с помощью конструктора и дважды вызывает print_nt: после инициализации переменной и после использования конструктор для изменения значений всех элементов.

Использование Nested Tables

Вложенная таблица подходит, если:

  • Количество элементов не задано.
  • Значения индекса не являются последовательными.
  • Вы должны удалить или обновить некоторые элементы, но не все элементы одновременно.

Данные Nested Tables хранятся в отдельной хранимой таблице, таблице базы данных, сгенерированной системой. Когда вы обращаетесь к Nested Tables, база данных join (присоединяет) Nested Tables к своей сохраненной таблице. Это делает Nested Tables подходящими для запросов и обновлений, которые затрагивают только некоторые элементы коллекции.
Вы должны создать отдельную таблицу поиска с несколькими записями для каждой строки основной таблицы и получить доступ к ней через запросы присоединения.