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

□ CALL set_example();

v_customer_nested_table2: Fred George Susan

488 Глава 13

Оператор IS A SET

Оператор IS A SET используется для проверки, являются ли все элементы

вложенной таблицы различными. Процедура is_a_set_example() иллюстрирует

применение оператора IS A SET:

□ CREATE PROCEDURE is_a_set_example AS

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

v_customer_nested_table1 t_ n e s te d _ ta b le :=

t_ n e s te d _ ta b le (1 Fred ’ , ‘ George’ , ‘ Susan , George ),

v _ r e s u lt BOOLEAN;

BEGIN

- - используем оператор IS A SET для проверки того, что элементы в

— v_customer_nested_table1 являются различными (они не являются,

- - поэтому v _ re s u lt устанавливается в f a ls e )

v _ r e s u lt := v_customer_nested_table1 IS A SET;

IF v _ r e s u lt THEN

DBMS_0UTPUT.PUT_LINE('Elements are a l l u n iq u e ');

ELSE

DBMS_0UTPUT.PUT_LINE(' El ement s co nta in d u p l i c a t e s );

END IF; "

END is_a_set_example;

/

В следующем примере вызывается is_a_set_example():

□ CALL is_a_set_example();

E lement s c o nta in d u p l i c a t e s

Оператор IS EM P T Y

Оператор IS EMPTY используется для проверки, содержит ли элементы вложенная

таблица. Процедура is_empty_example() иллюстрирует применение

оператора IS EMPTY:

□ CREATE PROCEDURE is_empty_example AS

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

v_customer_nested_table1 t_ n e s te d _ ta b le :=

t_ n e s te d _ ta b le ( ‘ Fred’ , ‘ George’ , ‘ Susan’ );

v _ r e s u lt BOOLEAN;

BEGIN

- - используем оператор IS EMPTY для проверки того, является ли

— v_customer_nested_table1 пустой (она не являются,

- - поэтому v _ re s u lt устанавливается в f a ls e )

v _ r e s u lt := v_customer_nested_table1 IS EMPTY;

IF v _ r e s u lt THEN

DBMS_0UTPUT.PUT_LINE('Nested t a b le i s empt y ' ) ;

ELSE

DBMS_0UTPUT.PUT_LINE(' Nested t a b le co n t a in s elements );

END IF;

END is_empty_example;

/

В следующем примере вызывается is_empty_example():

Коллекции 489

□ CALL is_empty_example();

Nested table contains elements

Функция C O L L E C T ()

Функция C0LLECT() возвращает список значений в виде вложенной таблицы.

Следующий запрос иллюстрирует применение COLLECT():

□ SELECT COLLECT(first_name)

FROM customers_with_varray;

COLLECT( FIRST_NAME)

SYSTPxBtv6XzZXLjgNAADug9CQQ==(' Steve’ , ‘ John’ )

Вы можете использовать CAST() для преобразования элементов, возвращаемых

COLLECT( ) , в конкретный тип, как показано в следующем запросе:

П SELECT CAST(COLLECT( first_name) AS t_table)

FROM customers_with_varray;

CAST(COLLECT(FIRST_NAME)AST_TABLE)

T_TABLE(‘ Steve’ , ‘ John’ )

Для сведения: тип t_table, который был использован в предыдущем

примере, создаётся при помощи следующего выражения в сценарии

collection_schema3.sqclass="underline"

□ CREATE TYPE t„table AS TABLE OF VARCHAR2(10);

/

Функция POW ERM U LT ISE TO

Функция POWERMULTISETO возвращает все комбинации элементов в заданной

вложенной таблице, как показано в следующем запросе:

□ SELECT *

FROM TABLE(

POWERMULTISET( t_ ta b le (' This’ , ‘ i s’ , ‘ a’ , ‘ test ’ ))

);

COLUMN_VALUE

T_TABLE

TJABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T_TABLE

T TABLE

1 This’

1 i s ’ )

1 This’

a’ )

This’

i s ’ ,

This’

te s t ’

This’

i s’ ,

This’

a' , '

This’

i s’ ,

This’

)

, ‘ i s ’ )

, ‘ a’ )

‘ a’ )

, ‘ i s ’ , ' a’ )

)

, ‘ test ’ )

‘ test ’ )

, ‘ i s’ , ' test ’ )

test ’ )

, ‘ a’ , ‘ test ’ )

‘ a’ , ‘ test ’ )

, ‘ i s’ , ‘ a’ , ‘ test ’

490 Глава 13

Ф у н к ц и я P O W E R M U L T IS E T _ B Y _ C A R D IN A L IT Y ( )

Функция POWERMULTISET_BY_CARDINALITY возвращает комбинации элементов

из данной вложенной таблицы, которые имеют заданное количество элементов.

Следующий запрос иллюстрирует применение POWERMULTISET_BY_

0ARDINALITYO:

□ SELECT *

FROM TABLE(

POWERMULTISET_BY_CARDINALITY(

t_nested_table(1 This’ , ‘ i s’ , ’ a’ , ‘ test ’ ), 3

)

);

COLUMN_VALUE

T_TABLE(' This’ , ‘ i s’ , ‘ a’ )

T_TABLE( ‘ This’ , ‘ i s’ , ‘ test ’ )

T_TABLE(' This’ , ‘ a’ , ‘ test ’ )

T_TABLE(‘ i s ’ , ‘ a’ , ‘ test ’ )

Итоги

В этой главе вы узнали, что

■ Коллекции позволяют хранить множества элементов.

■ Есть три типа коллекций: массивы переменной длины, вложенные

таблицы и ассоциативные массивы.

■ Массив переменной длины похож на массив в Java; можно использовать

этот массив для хранения упорядоченного множества элементов,

с каждым из которых связан индекс. Все элементы массива переменной

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

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

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

■ Вложенная таблица - это таблица, встроенная в другую таблицу, и в

которую можно вставлять, модифицировать или удалять индивидуальные

элементы. Поскольку можно модифицировать индивидуальные

элементы, вложенные таблицы являются более гибким средством,