Изменяемый массив, или массив с переменной длиной (varray, varying array, variable length array), - это тип данных, практически идентичный массиву в языке программирования С или Java. Синтаксически обращение к изменяемому массиву происходит так же, как к вложенной или индексной таблице. Однако для размера массива устанавливается фиксированная верхняя граница, указываемая в объявлении типа. Структура массива — это не разреженная структура данных без верхней границы; элементы вводятся в массив, начиная с индекса 1 и до максимального значения, заданного в объявлении типа изменяемого массива. Максимальный размер изменяемого массива — 2 гигабайта.
Изменяемый массив хранится так же, как массив в С или Java, — непрерывно в памяти, в отличие от вложенной или индексной таблицы, которая больше похожа на таблицу базы данных.
Объявление изменяемого массива
Тип изменяемого массива объявляется следующим образом:
TYPE имя_типа {VARRAY | VARYING ARRAY] (максимальный_размер) OF типэлементов [NOT NULL];
где имя_типа — это имя нового типа изменяемого массива, максимальный_размер— целое число, определяющее максимальное количество элементов в изменяемом массиве, а тип_элементов — скалярный тип, тип записи или объектный тип PL/SQL. Кроме того, тип элементов можно указать при помощи %TYPE, но недопустимы BOOLEAN, NCHAR, NCLOB, NVARCHAR2, REF CURSOR. До версии Oracle9i типом элементов не могли быть также TABLE и VARRAY. Приведем пример правильно -го использования типов изменяемых массивов:
Инициализация изменяемых массивов
Как и таблицы, изменяемые массивы инициализируются с помощью конструкторов. Число аргументов, передаваемых конструктору, становится начальной длиной изменяемого массива и не должно превышать максимальной длиной, указанной в его типе. Покажем это на примере сеанса работы в SQL*Plus:
Работа с элементами изменяемых массивов
Как и в случае вложенной таблицы, начальный размер изменяемого массива определяется числом элементов, указываемых в конструкторе при объявлении массива. Присвоение значений элементам, не попадающим в указанный диапазон, приводит к ошибке "ORA-6533: Subscript beyond count" (неправильный индекс). Рассмотрим пример сеанса SQL*Plus:
Этот пример содержится в файле varAssign.sql
Совет
Подобно вложенным таблицам, размер изменяемого массива можно увеличить при помощи метода EXTEND (см. ниже). Однако в отличие от вложенных таблиц изменяемый массив не может увеличиться сверх того размера, который был указан как максимальный при объявлении типа изменяемого массива.
При попытке присвоить значения элементам вне максимального размера изменяемого массива или расширить его сверх максимального размера устанавливается ошибка "ORA-6532: Subscript outside of limit" (неверный индекс), которая эквивалентна предопределенной исключительной ситуации SUBSCRIPT_OUTSIDE_LIMIT. Приведем пример:
< Предыдущая | Следующая > |
---|