можете хранить любое число адресов, вплоть до верхнего предела для
varray.
Заполнение вложенной таблицы элементами
Следующий оператор INSERT добавляет строки в customers_with_nested_
table. Обратите внимание на использование конструкторов t_nested_
table_address Haddress_typ для определения элементов вложенной таблицы:
□ INSERT INTO customers_with_nested_table VALUES (
1 , ‘ S t e v e ’ , ‘ Brown’ ,
t_nested_table_add ress(
t_address(‘ 2 State Street*, ‘ Beantown’ , ‘MA’ , ‘ 12345’ ),
t_address(‘ 4 Hill Street’ , ‘ Lost Town’ , ’ CA’ , ‘ 54321’ )
)
);
INSERT INTO customers_with_nested_table VALUES (
1, ‘ S t e v e ’ , ‘ Brown’ ,
t_nes ted_tabl e_add ress (
t_address(‘ 1 High Street’ , ‘ Newtown’ , ’ CA’ , ‘ 12347’ ),
t_address(‘ 3 New Street’ , ‘ Anytown’ , ‘ MI’ , 54323’ ),
t_address(‘ 7 Market Street’ , ‘ Main Town’ , ’ MA’ , ‘ 54323’ )
))
;
Как вы видите, в первой строке содержатся два адреса, а во второй -
три. Во вложенной таблице может храниться любое число адресов.
Выбор элементов из коллекций
В этом разделе вы увидите, как выбирать элементы из varray и вложенной
таблицы при помощи запросов. Выходные данные запросов немного изменены,
чтобы результаты были лучше читать.
Выборка элементов из массива переменной длины
Следующий оператор SELECT отбирает покупателя №1 из таблицы
customers_with_varray. Возвращается одна строка, и она содержит два адреса,
которые хранятся в varray:
□ SELECT *
FROM customers_with_vaг ray
WHERE id = 1;
452 Глава 13
ID FIRST_NAME LAST_NAME
ADDRESSES
1 Steve Brown T_VARRAY_Address ( ‘ 2 State Street, Beantown, MA, 12345’
'4 H ill Street, Lost Town, CA, 54321’ )
Следующий запрос указывает имена столбцов:
□ SELECT id, first_name, last_name, address
FROM customers_with_varray
WHERE id = 1;
ID FIRST_NAME LASTJJAME
ADDRESSES
1 Steve Brown T_VARRAY_Address ('2 State Street, Beantown, MA, 12345’ ,
‘ 4 H ill Street, Lost Town, CA, 54321’ )
Все эти примеры возвращают адреса из varray в виде одной строки.
Позже, в разделе “Использование TABLE() для представления коллекции в
виде последовательности строк” , вы увидите, как обрабатывать данные,
хранящиеся в коллекции, как последовательность строк.
Выборка элементов вложенных таблиц
Следующий оператор SELECT выбирает покупателя №1 из customers_with_
nested_table. Возвращается одна строка, и она содержит два адреса, которые
хранятся во вложенной таблице:
□ SELECT *
FROM customers_with_nested_table
WHERE id = 1;
ID FIRST JJAME LAST_NAME
ADDRESSES (STREET, CITY, STATE, ZIP)
1 Steve Brown
T_NESTED_TABLE_Address(
T_Address ( ‘ 2 State Street’ , ‘ Beantown’ , ‘ MA’ , ‘ 12345’ ),
T_Address ( ‘ 4 Hill Street’ , ‘ Lost Town’ , ‘ CA’ , ‘ 54321’ ))
В следующем запросе указаны названия столбцов:
□ SELECT id, first_name, last_name, addresses
FROM customers_with_nested_table
WHERE id = 1;
ID FIRST_NAME LASTJJAME
ADDRESSES (STREET, CITY, STATE, ZIP)
1 Steve Brown
Коллекции 453
T_NESTED_TABLE_Address(
T_Address ( ‘ 2 State Street’ , ‘ Beantown’ , ‘ MA’ , ‘ 12345’ ),
T_Address ( ‘ 4 Hill Street', ‘ Lost Town’ , ‘ CA’ , ‘ 54321’ ) )
Следующий запрос получает только вложенную таблицу addresses. Как
и в предыдущих примерах, возвращается одна строка, и она содержит два
адреса, которые хранятся во вложенной таблице:
□ SELECT addresses
FROM customers_with_nested table
WHERE id = 1;
ADDRESSES (STREET, CITY, STATE, ZIP)
T_NESTED_TABLE_Address(
T_Address ( ‘ 2 State Street’ , ‘ Beantown’ , ‘ MA’ , ‘ 12345’ ),
T_Address ( ‘ 4 Hill Street’ , ‘ Lost Town’ , ‘ CA’ , ‘ 54321’ ) )
Использование TABLE() для представления коллекции в виде
последовательности строк
Предыдущие запросы, которые вы видели в этой главе, возвращают содержимое
коллекции в виде одной строки. Иногда вам может понадобиться
обрабатывать данные, которые хранятся в коллекции как последовательность
строк; например, если вы работаете с устаревшим приложением,
которое может использовать только строки. Для представления коллекции
в виде последовательности строк используется функция TABLE ().
В этом разделе вы увидите, как использовать TABLE ( ) с varray и вложенной
таблицей.
Использование TABLE() с Varray
Следующий запрос использует TABLE () для получения двух адресов покупателя
№1 из таблицы customers_with_varray. Возвращены две отдельные
строки:
□ SELECT а.*
FROM customers_with_varray с, TABLE(c.addresses) а
WHERE id = 1;
COLUMN_VALUE
2 State Street, Beantown, MA, 12345
4 H ill Street, Lost Town, CA, 54321
Обратите внимание, что база данных Oracle автоматически добавляет
название столбца COLUMN_VALUE для строк, возвращаемых запросом. Имя
COLUMN_VALUE является псевдонимом псевдостолбца и автоматически добавляется
в том случае, если коллекция содержит данные одного из встроенных
типов данных, таких как VARCHAR2, CHAR, NUMBER, или DATE. Поскольку
varray в примере содержит данные VARCHAR2, то добавляется псевдоним
COLUMN_VALUE. Если бы varray содержал данные типа, определённого