Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Топ:
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2022-12-20 | 17 |
5.00
из
|
Заказать работу |
|
|
Для работы с коллекциями всех видов имеется группа методов, обращение к которым записывается как
имя_коллекции.имя_метода [(параметры)]
Методы для коллекций перечисляются ниже:
Метод коллекции | Описание |
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!