В следующем примере массив, в котором может содержаться до 100 назначений для персонала, помещается в таблицу Projects:
CREATE OR REPLACE TYPE staff_assignment_v AS VARRAY (100) OF   staff_assignment_o; CREATE TABLE projects
( proj_id    NUMBER         PRIMARY KEY
, proj_name  VARCHAR2(30)   NOT NULL
, manager    NUMBER        NOT NULL REFERENCES project_members
, assignments staff_assignment_v — до 100 назначений
, roi BFILE -- оставить таблицу на файловом сервере
) ;
Тип staff_assignment_v имеет функцию-конструктор, которая принимает до 100 аргументов, каждый из которых должен либо быть типа staff_assign-ment, либо иметь значение NULL. С помощью этого конструктора столбец можно заполнять, используя SQL-предложения INSERT или UPDATE.
Совет:
Выбор значения максимальной размерности для VARRAY более важен, чем может показаться на первый взгляд, поскольку Oracle использует максимально возможную длину VARRAY для определения того, как хранить данное значение — вместе со строкой данных или в отдельном сегменте.
В следующих фрагментах производится выборка VARRAY из таблицы в переменную PL/SQL:
p_assigns staff_assignment_v;
SELECT assignments INTO p_assigns
FROM projects WHERE proj_id = 42;
Теперь отдельные назначения могут извлекаться из этой переменной. Возможность обрабатывать короткие повторяющиеся группы данных без использования подчиненной таблицы может дать значительный выигрыш в производительности.
Вложенные таблицы
Термин "вложенные таблицы" (nested tables) совершенно точно отражает суть этого понятия — это таблицы, обращение к которым производится в контексте родительской строки. В настоящее время OracleS поддерживает только один уровень вложенности. Головная таблица может содержать несколько вложенных таблиц, но вложенная таблица не может содержать другую вложенную таблицу. Это очень серьезное ограничение. Оно означает,
5. Объекты	105