Название: Язык PL/SQL
Автор: Иван Сергеевич Задворьев
Издательство: ЛитРес: Самиздат
Жанр: Базы данных
isbn:
isbn:
старший инженер (60000 руб.)
PL/SQL procedure successfully completed.
Таблицы PL/SQL являются разреженными. Чтобы подчеркнуть это, в примере выше специально использованы случайно выбранные индексы 9 и 267, а не 1 и 2. Для перебора таблицы PL/SQL использованы ее встроенные методы FIRST и NEXT.
Коллекции PL/SQL имеют восемь встроенных методов.
Таблица 1. Встроенные методы коллекций PL/SQL.
Метод коллекции
Описание метода
COUNT (функция)
возвращает текущее число элементов в коллекции
DELETE (процедура)
удаляет из коллекции один или несколько элементов
EXISTS (функция)
определяет, существует ли в коллекции заданный элемент
EXTEND (процедура)
увеличивает количество элементов во вложенной таблице или массиве переменной длины
FIRST, LAST (функции)
возвращают индексы первого (FIRST) и последнего (LAST) элемента в коллекции
LIMIT (функция)
возвращает максимальное количество элементов в массиве переменной длины
PRIOR, NEXT (функции)
возвращают индексы элементов, предшествующих заданному (PRIOR) и следующему за ним (NEXT).
TRIM (процедура)
удаляет элементы, начиная с конца коллекции
Рекомендуется перебор элементов коллекций осуществлять с помощью методов FIRST и NEXT, а не с помощью циклов со счетчиком FOR, исходя из ожидаемой плотности коллекции. Цикл FOR перебирает весь заданный диапазон индексов подряд, что может привести к ошибке – обращению к отсутствующему элементу. Метод NEXT перемещается по индексам только «живых» элементов и ошибок из-за пропусков в нумерации не будет.
Индексы-строки таблиц PL/SQL
В версии Oracle 9i появилась возможность использовать для индексирования таблиц PL/SQL символьные строки. Это очень удобно, например, для работы со справочниками, в которых и коды и термины являются строками.
Рассмотрим пример.
SQL> DECLARE
2 TYPE t_tab IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(2);
3 l_tab t_tab;
4 l_code varchar2(3) := 'MD';
5 BEGIN
6 – заполняем таблицу PL/SQL
7 l_tab('UA') := 'Украина';
8 l_tab('MD') := 'Молдавия';
9 – работаем с таблицей PL/SQL
10 l_code := 'MD'
11 DBMS_OUTPUT.PUT_LINE('1) Термин для '||l_code||' – '||l_tab(l_code));
12 l_code := 'UA'
13 IF l_tab.EXISTS('UA') THEN
14 DBMS_OUTPUT.PUT_LINE('2) Код '||l_code||' есть в справочнике');
15 END IF;
16 END;
17 /
1) Термин для MD – Молдавия
2) Код UA есть в справочнике
PL/SQL procedure successfully completed.
Массивы переменной длины и вложенные таблицы
Типы данных на основе вложенных таблиц и массивов переменной длины в основном создаются как объекты баз данных и используются в объектно-реляционных расширениях Oracle. Соответственно, для работы со считываемыми из баз данных массивами и вложенными таблицами в программах PL/SQL следует использовать переменные таких же типов данных.
Рассмотрим объектные расширения Oracle и работу с ними в PL/SQL на следующем примере.
Пусть СКАЧАТЬ