Информацию о массивах переменной длины можно получить из представления
user_varrays. В таблице 13.1 описываются некоторые из столбцов
представления user_varrays.
448 Глава 13
Таблица 13.1. Столбцы в представлении user_varrays
Столбец Тип Описание
parent_table_name VARCHAR2(30) Имя таблицы, содержащей массив переменной
длины.
parent_table_
column
VARCHAR2(4000) Имя столбца родительской таблицы, содержащего
массив переменной длины.
type_owner VARCHAR2(30) Пользователь, владеющий типом массива переменной
дины.
type_name VARCHAR2(30) Имя типа массива переменной длины.
lob.name VARCHAR2(30) Название большого объекта (large object - LOB),
если массив переменной длины хранится в LOB
(подробнее о L0B см. в следующей главе).
storage_spec VARCHAR2(30) Спецификация памяти для массива переменной
длины.
return_type VARCt)AR2(20) Возвращаемый тип столбца.
element.
substitutable
VARCHAR2(25) Является или нет (Y/N) элемент varray замещаемым
для подтипа.
Примечание Информацию о всех массивах переменной длины, к которым вы имеете доступ,
можно получить из представления all_varrays.
Следующий пример получает
ставления user_varrays:
информацию о t_varray_address из пред-
SELECT parent_table_name, parent_table_column, type_name
FROM u ser_varray s
WHERE type_name = ‘ T_VARRAY_ADDRESS’ ;
PARENT_TABLE_NAME
PARENT_TABLE_COLUMN
TYPE_NAME
CUSTOMERS_WITH_VARRAY
AddressES
T_VARRAY_ADDRESS
Получение информации о вложенных таблицах
Для получения информации о вложенных таблицах можно использовать
команду DESCRIBE. В следующем примере описывается t_nested_table_
address:
□ DESCRIBE t.nested_table_add ress
t nested_table_address TABLE OF T_ADDRESS
Коллекции 449
Name Null? Type
STREET
CITY
STATE
ZIP
VARCHAR2(15)
VARCHAR2(15)
CHAR(2)
VARCHAR2(5)
В следующем примере описывается таблица customers_with_nested.
table, столбец add resses которой имеет тип t_nested_table_add ress:
DESCRIBE customers_with _nested_table
Name Null? Type
ID
FIRST_NAME
LAST_NAME
ADDRESSES
NOT NULL NUMBER(38)
VARCHAR2(10)
VARCHAR2(10)
T_NESTED_TABLE_ADDRESS
Если установить глубину показа равной 2 и еще раз описать customers.
with_nested_table, можно увидеть и атрибуты, из которых состоит t_
nested_table_address:
SET DESCRIBE DEPTH 2
DESCRIBE customers_with__nested_table
Name Null? Type
ID
FIRST_NAME
LAST_NAME
ADDRESSES
STREET
CITY
STATE
ZIP
NOT NULL NUMBER(38)
VARCHAR2(10)
VARCHAR2(10)
T_NESTED_TABLE_ADDRESS
VARCHAR2(15)
VARCHAR2(15)
CHAR(2)
VARCHAR2(5)
Кроме того, информацию о вложенных таблицах можно получить из
представления user_nested_tables. В таблице 13.2 перечислены столбцы в
user_nested_tables.
Примечание Информацию о всех вложенных таблицах, к которым вы имеете доступ, можно
получить из представления all_nested_tables.
Следующий пример получает данные о таблице nested_addresses из
user_nested_tables:
□ SELECT table_name, table_type_name, parent_table_name, parent_table_
column
FROM user_nested_tables
WHERE table_name = 1NESTED_ADDRESSES’ ;
450 Глава 13
TABLE_NAME TABLE_TYPE_NAME
PARENT_TABLE_NAME
PARENT_TABLE_COLUMN
NESTED_ADDRESSES
CUSTOMERS_WITH_NESTED_TABLE
T_NESTED_TABLE_Address
ADDRESSES
Таблица 13.2. Столбцы в представлении user_nested_tables
Столбец Тип Описание
table_name VARCHAR2(30) Имя вложенной таблицы.
table.type.owner VARCHAR2(30) Пользователь, владеющий типом вложенной таблицы.
table_type_name VARCHAR2(30) Имя типа вложенной таблицы.
parent.table.
name
VARCHAR2(30) Имя родительской таблицы, содержащей вложенную
таблицу.
parent_table_
column
VARCHAR2(4000) Имя столбца родительской таблицы, содержащей
вложенную таблицу.
storage_spec VARCHAR2(30) Спецификация хранения для вложенной таблицы.
return_type VARCHAR2(20) Возвращаемый тип столбца.
element.
substitutable
VARCHAR2(25) Является или нет (Y/N) элемент вложенной таблицы
замещаемым для подтипа.
Заполнение коллекции элементами
В этом разделе вы увидите, как заполнять varray и вложенные таблицы элементами
при помощи выражений INSERT. Вам не нужно запускать выражения
INSERT, которые показаны в этом разделе: они выполняются при запуске
сценария collection_schema. sql.
Заполнение массива переменной длины элементами
Следующий оператор INSERT вставляет строки в таблицу customers.with.
varray. Обратите внимание на использование конструктора t_varray_
add ress для указания строк для элементов varray:
□ INSERT INTO customers_with_array VALUES (
1 , ' Steve’ , ' Brown’ ,
t_varray_address(
‘ 2 State Street, Beantown, MA, 12345’ ,
‘ 4 H ill Street, Lost Town, CA, 54321’
)
INSERT INTO customers_with_array VALUES (
2, ‘ John’ , ‘ Smith’ ,
t_varray_address(
Коллекции 451
‘ 1 High Street, Newtown, CA, 12347',
‘ 3 New Street, Anytown, MI, 54323’ ,
‘ 7 Market Street, Main Town, MA, 54323’
)
);
Как видите, в первой строке хранятся два адреса, а во второй - три. Вы