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

В следующем примере включается вывод на сервере и вызывается

customers_associative_array():

□ SET SERVEROUTPUT ON

CALL customers_associative_array();

4 8 0 Глава 13

v_customer_array[‘ Jason’ ] = 32

v_customer_array[' Steve’ ] = 28

v_customer_array[‘ Fred'] = 43

v_customer_array[‘ Cynthia’ ] = 27

Изменение размера типа элемента

Можно изменить размер типа элемента в коллекции, если тип элемента

принадлежит к символьным, числовым или бесформатным типам (бесформатные

типы используются для хранения двоичных данных - вы

познакомитесь с ними в следующей главе). Ранее в этой главе был приведен

пример, в котором создается тип массива переменной длины по имени

t_varray_address:

□ CREATE TYPE t_varray_address AS VARRAY(2) OF VARCHAR2(50);

/

В следующем примере изменяется размер элементов VARCHAR2 в t_

varray_address н а 60:

□ ALTER TYPE t_varray_address

MODIFY ELEMENT TYPE VARCHAR2(60) CASCADE;

Type altered.

Опция CASCADE передает изменения во все зависимые объекты в базе

данных. В данном примере зависимым объектом является таблица

customers_with_varray, которая содержит столбец типа t_varray_add ress по

имени addresses. Кроме того, можно использовать опцию INVALIDATE, чтобы

сделать недействительными любые зависимые объекты и немедленно

рекомпилировать код PL/SQL для этого типа.

Увеличение количества элементов массива переменной длины

Число элементов массива переменной длины можно увеличить. В следующем

примере увеличивается число элементов в t_varray_address до 5:

□ ALTER TYPE t_varray_address

MODIFY LIMIT 5 CASCADE;

Type altered.

Использование массивов переменной длины во временных таблицах

Массивы переменной длины можно использовать во временных таблицах,

строки которых являются временными и зависят от сессии пользователя

(временные таблицы были рассмотрены в разделе «Создание таблиц» в

главе 10). В следующем примере создается временная таблица cust_with_

varray_temp_table, содержащая массив переменной длины addresses типа

t_varray_address:

□ CREATE GLOBAL TEMPORARY TABLE cust_with_varray_temp_table (

id INTEGER PRIMARY KEY,

first_name VARCHAR2(10),

last_name VARCHAR2(10),

addresses t_varray_address

);

Коллекции 481

Использование различных табличных пространств для таблицы,

в которой хранятся вложенные таблицы

По умолчанию таблица, в которой хранится вложенная таблица, создается

в том же самом табличном пространстве, что и родительская таблица.

(Табличное пространство - это область, которая используется базой данных

для хранения таких объектов, как таблицы - см. раздел «Создание таблиц

» главы 10.)

В Oracle 10g и выше можно указать для таблицы, в которой хранится

вложенная таблица, другое табличное пространство. В следующем примере

создается таблица cust_with_nested_table, содержащая вложенную таблицу

addresses типа t_nested_table_address. Обратите внимание, что память

для хранения таблицы nested_addresses2 будет выделена в табличном

пространстве users:

□ CREATE TABLE cust_with_nested_table (

id INTEGER PRIMARY KEY,

first_name VARCHAR2(10),

last_name VARCHAR2(10),

addresses t_nested_table_address

) NESTED TABLE

addresses

STORE AS

nested_addresses2 TABLESPACE users;

Чтобы этот пример работал, у вас должно существовать табличное пространство

users. По этой причине этот пример в сценарии collection_

schema3.sql “закомментарен”. Вы можете посмотреть, к каким табличным

пространствам у вас есть доступ, сделав запрос к представлению user_

tablespaces:

□ SELECT tablespace_name

FROM user_tablespaces;

TABLESPACE_NAME

SYSTEM

SYSAUX

UND0TBS1

TEMP

USERS

EXAMPLE

Если вы хотите выполнить предыдущий пример, вы можете отредактировать

эту часть сценария collection_schema3.sql и указать одно из доступных

вам табличных пространств, а затем скопировать пример в SQITPlus и

выполнить его.

Поддержка ANSI для вложенных таблиц

Спецификация Национального института стандартизации США (ANSI)

включает некоторое количество операторов, которые могут быть исполь482

Глава 13

зованы со вложенными таблицами. В следующих разделах вы ознакомитесь

с этими операторами.

Операторы равенства и неравенства

Операторы равенства (=) и неравенства ( о ) используются для сравнения

вложенных таблиц, которые считаются равными при выполнении всех перечисленных

ниже условий:

■ все таблицы имеют один и тот же тип;

■ все таблицы содержат одинаковое число элементов;

■ все элементы равны.

Приведенная ниже процедура equal_example() иллюстрирует применение

операторов равенства и неравенства:

□ CREATE PROCEDURE equal_example AS

— объявим тип по имени t_ n e s te d _ ta b le

TYPE t_ n e s te d _ ta b le IS TABLE OF VARCHAR2(10);

- - создадим объекты типа t_ n e s te d _ ta b le по имени v_customer_nested_