При создании индексной таблицы без элементов она будет пустой. А при объявлении вложенной таблицы без элементов (см. предыдущий пример) она, подобно другим типам PL/SQL, инициализируется с помощью NULL. При попытке добавить элемент к вложенной NULL-таблице возвращается сообщение об ошибке "ORA-6531: Reference to uninitialized collection" (ссылка на неинициализированную сборную конструкцию). Эта ошибка соответствует предопределенной исключительной ситуации COLLECTION_IS_NULL. При выполнении следующего раздела возникнет ошибка:
Как же инициализировать вложенную таблицу? Это делается при помощи функции-конструктора. Конструктор вложенной таблицы имеет то же имя, что и сама таблица. Однако число его аргументов варьируется, причем каждый из аргументов должен иметь тип, совместимый с типом таблицы. Аргументы становятся элементами таблицы с последовательными индексами, начиная с индекса 1. В следующем сеансе SQL*Plus используются конструкторы вложенных таблиц:
Пустые таблицы
Обратите внимание на объявление в предыдущем блоке:
v_Tab2 инициализируется вызовом конструктора без аргументов. При этом создается таблица без элементов, однако она не является атомарной NULL-таблицей. Продемонстрируем это с помощью сеанса SQL*Plus:
Добавление элементов в существующую таблицу
Хотя для таблицы не устанавливается никаких ограничений, нельзя присвоить значение элементу, который еще не существует. Если попытаться это сделать, PL/SQL выдаст сообщение об ошибке "ORA-6533: Subscript beyond count" (неправильный индекс), которая эквивалентна предопределенной исключительной ситуации SUBSCRIPT_BEYOND_COUNT. Приведем пример:
Совет
Можно увеличить размер вложенной таблицы при помощи метода EXTEND (см. ниже).
< Предыдущая | Следующая > |
---|