Главная > SQL > Функции для работы с коллекциями


Функции для работы с коллекциями

Рассмотрим функции для работы с nested tables и varrays (11G)

Сделаем nested tables для примеров:

create or replace type test_number_table as table of number(20);

CARDINALITY

CARDINALITY возвращает число элеметов в nested table. Тип возращаемого значения NUMBER.
Если вложенная таблица пустая или is null, тогда CARDINALITY вернет NULL.

SQL> select CARDINALITY(test_number_table(1,2,3,4,5,1,2)) as t_cardinality from dual;

T_CARDINALITY
-------------
            7


COLLECT

COLLECT — агрегатная фунция, принимает на вход колонку любого типа и создаёт nested table на выходе.
Для получения правильных результатов, должна использоваться вместе с функцией CAST.

SQL> select CAST(COLLECT(t.empno) AS test_number_table) as empno_collect  from scott.emp t;

EMPNO_COLLECT
--------------------------------------------------------------------------------
TEST_NUMBER_TABLE(7369, 7499, 7521, 7566, 7654, 7698, 7782, 7788, 7839, 7844, 78
76, 7900, 7902, 7934, 8000)

POWERMULTISET

POWERMULTISET принимает на вход nested table и возвращает nested table of nested tables (вложенные таблицы вложеных таблиц) содержащие все непустые подмножества — все возможные комбинации из значений. POWERMULTISET нельзя использовать в PL/SQL.

SQL> select * from table(POWERMULTISET( test_number_table(1,2,3) ) );

COLUMN_VALUE
--------------------------------------------------------------------------------
TEST_NUMBER_TABLE(1)
TEST_NUMBER_TABLE(2)
TEST_NUMBER_TABLE(1, 2)
TEST_NUMBER_TABLE(3)
TEST_NUMBER_TABLE(1, 3)
TEST_NUMBER_TABLE(2, 3)
TEST_NUMBER_TABLE(1, 2, 3)

7 rows selected.

POWERMULTISET_BY_CARDINALITY

POWERMULTISET_BY_CARDINALITY принимает на вход nested table и cardinality (количество элементов) и возвращает nested table of nested tables содержащие всевозможные комбинации значений с указаным количеством элементов.

SQL> select * from table(POWERMULTISET_BY_CARDINALITY( test_number_table(1,2,3) , 2) );

COLUMN_VALUE
--------------------------------------------------------------------------------
TEST_NUMBER_TABLE(1, 2)
TEST_NUMBER_TABLE(1, 3)
TEST_NUMBER_TABLE(2, 3)

SET

SET удаляет дубликаты в наборе данных.

SQL> select * from table(set(test_number_table(1,2,3,4,5,1,2)));

COLUMN_VALUE
------------
           1
           2
           3
           4
           5

 

Похожие записи:

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.