DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Изменяемые массивы

Изменяемый массив, или массив с переменной длиной (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. Приведем пример:


 


банкет заказать







jAntivirus