Методы для работы с коллекциями — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Методы для работы с коллекциями

2022-12-20 17
Методы для работы с коллекциями 0.00 из 5.00 0 оценок
Заказать работу

Для работы с коллекциями всех видов имеется группа методов, обращение к которым записывается как

 

имя_коллекции.имя_метода [(параметры)]

 

Методы для коллекций перечисляются ниже:

 

Метод коллекции Описание
COUNT [()]1 Функция Возвращает текущее число элементов в коллекции
DELETE [(i [,j])] Процедура Удаляет из вложенной или индексированной таблицы элемент i или с i-го по j-й. При отсутствии параметров удаляет все элементы (единственно возможный вариант для VARRAY).
EXISTS (i) Функция Выдает TRUE или FALSE в зависимости от существования i-го элемента. Для непроинициализированной вложенной таблицы или массива VARRAY выдает FALSE
EXTEND [(n [,i])] Процедура Добавляет в коллекцию n элементов, инициализируя их значением элемента i. По умолчанию n = 1.
FIRST [()]1 Функция Возвращает наименьший по значению индекс в коллекции. Для пустой проинициализированной коллекции возвращает NULL
LAST [()]1 Функция Возвращает наибольший по значению индекс в коллекции. Для пустой проинициализированной коллекции возвращает NULL
LIMIT [()]1 Функция Для конкретного массива VARRAY возвращает максимально допустимое число элементов. Для вложенных и индексированных таблиц возвращает NULL
PRIOR (i) Функция Возвращает значение индекса, непосредственно предшествующее индексу i. Если i <= FIRST, возвращает NULL
NEXT (i) Функция Возвращает значение индекса, непосредственно следующее за индексом i. Если i >= COUNT, возвращает NULL
TRIM (i) Процедура Удаляет n последних элементов из коллекции. По умолчанию n = 1. Если n равно NULL, процедура ничего не делает. Неприменима к индексированным таблицам

1  Список параметров всегда пустой, но PL/SQL равно допускает как указание, так и пропуск пустых круглых скобок. Тем не менее указание (хотя и пустых) круглых скобок соответствует правилам объектного подхода, а пропуск – нет.

 

Все функции, кроме EXIST, возвращают BINARY_INTEGER. Все параметры методов также типа BINARY_INTEGER. 

 

Метод EXIST, примененный к коллекции в состоянии NULL, не вызовет исключительного состояния COLLECTION_IS_NULL.

 

 

Примеры использования коллекций в программе

Пример, поясняющий действие методов:

 

DECLARE

           TYPE colours_tab_type IS TABLE OF VARCHAR2 (30);

           my_list colours_tab_type:= colours_tab_type (‘RED’, ‘GREEN’, NULL, NULL);

           str VARCHAR2 (20);

BEGIN

           DBMS_OUTPUT.PUT_LINE (‘my_list has ‘ || my_list.COUNT() || ’ elements’);

           my_list.DELETE(2, 3);

           DBMS_OUTPUT.PUT_LINE (‘my_list has ‘ || my_list.COUNT() || ’ elements’);

           FOR element# IN my_list.FIRST().. my_list.LAST()

           LOOP

                           IF my_list.EXISTS (element#)

                           THEN

                                           str:= NVL (my_list (element#),’[NULL]’);

                           ELSE

                                           str:= ‘deleted‘;

                           END IF;

                           DBMS_OUTPUT.PUT_LINE (‘Element ‘ || element# || ‘ is ‘ || str || ‘. ‘ ||

                                           ‘ Prior = ‘ || NVL (my_list.PRIOR (element#), -1) ||

                                           ‘ Next = ‘ || NVL (my_list.NEXT (element#), -1));

           END LOOP;

END;

/

 

Пример множественных операций (начиная с версии 10):

 

CREATE OR REPLACE TYPE ntt IS TABLE OF NUMBER (4)

/

 

DECLARE

nt1 ntt;

nt2 ntt;

nt3 ntt;

 

BEGIN

WITH emps AS (SELECT empno FROM emp WHERE comm IS NOT NULL)

SELECT CAST (MULTISET (SELECT * FROM emps) AS ntt) INTO nt1

FROM dual;

 

WITH emps AS (SELECT empno FROM emp WHERE job = 'SALESMAN')

SELECT CAST (MULTISET (SELECT * FROM emps) AS ntt) INTO nt2

FROM dual;

 

IF nt1 = nt2

THEN dbms_output.put_line ('Only salesmen have commissions');

END IF;

 

WITH emps AS (SELECT empno FROM emp WHERE job = 'ANALYST')

SELECT CAST (MULTISET (SELECT * FROM emps) AS ntt) INTO nt3

FROM dual;

 

IF nt1 IN (nt2, nt3)

THEN dbms_output.put_line

('Either all salesmen or all analysts have commissions');

END IF;

END;

/

 

Другой пример подчитывания данных в коллекцию выглядит более громоздко, однако не требует определения типа в БД (начиная с версии 8):

 

DECLARE

TYPE nt_type IS TABLE OF emp.empno%TYPE;

nt nt_type;

 

BEGIN

nt:= nt_type ();

FOR e IN (SELECT empno FROM emp WHERE job = 'SALESMAN')

LOOP

nt.EXTEND; nt (nt.LAST):= e.empno;

END LOOP;

 

--.........

 

END;

/

 

 

Привилегии

На использование типов коллекций, созданных в другой схеме БД, требуется иметь на них привилегию EXECUTE.

 

 

Серийное выполнение операций и связывание массивами

Возможность связывания элементов SQL-запроса не отдельными переменными, а массивами в виде коллекций, появилась в версии 8.1. Использование связывания массивами (коллекциями) позволяет существенно сократить обмен данными между клиентов и сервером.

 

Связывание массивами и серийное выполнение однотипных операций основывается на двух главных конструкциях: FORALL и BULK COLLECT INTO. Для них также существует несколько специальных атрибутов запроса SQL.

 

 


Поделиться с друзьями:

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.026 с.