Выбрать главу

можете хранить любое число адресов, вплоть до верхнего предела для

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 содержал данные типа, определённого