ИСПОЛЬЗОВАНИЕ МЕТОДОВ СБОРНЫХ КОНСТРУКЦИЙ СО ВЛОЖЕННЫМИ ТАБЛИЦАМИ И С ИЗМЕНЯЕМЫМИ МАССИВАМИ
ИНИЦИАЛИЗАЦИЯ ВЛОЖЕННЫХ ТАБЛИЦ И ИЗМЕНЯЕМЫХ МАССИВОВ
Особые замечания относительно вложенных таблиц и изменяемых массивов
При работе с вложенными таблицами и изменяемыми массивами необходимо иметь в виду то, что:
• вложенные таблицы могут содержать любое число строк; размер таблицы может увеличиваться или уменьшаться динамически;
• число строк в изменяемых массивах постоянно, т.е. ограничено;
• вложенные таблицы могут быть разреженными; Компоненты вложенных таблиц могут вноситься с использованием непоследовательных индексов; кроме того, можно удалять отдельные компоненты из любого места таблицы.
• изменяемые массивы должны оставаться плотными. Компоненты изменяемых массивов должны вноситься с использованием последовательных индексов.
Для инициализации вложенной таблицы или изменяемого массива в программе PL/SQL автоматически используется функция – конструктор для соответствующего типа. Функции – конструкторы PL/SQL имеют те же самые имена, что и типы вложенной таблицы или изменяемого массива. Когда в программе вызывается функция – конструктор для инициализации вложенной таблицы или изменяемого массива, можно указать список компонентов таблицы или массива, разделенных запятыми. При инициализации таблицы или массива записей необходимо ограничивать описание каждого компонента внутренними круглыми скобками. Например, в следующем фрагменте программы показано, как инициализировать вложенную таблицу, состоящую из трех компонентов, при её объявлении.
declare
type parts_table is table of sales.parts %rowtype;
current_parts_table parts_table := parts_table (
(1, 110.90, ’Samsung C110’),
null,
(3, 1200.00, ‘Network Computer’));
Из примера видно, что с помощью ключевого слова NULL можно инициализировать компонент вложенной таблицы, имеющий тип NULL.
В PL/SQL используется несколько различных методов сборных конструкций (collection methods), применяемых в программах для работы с вложенными таблицами и с изменяемыми массивами. В таблице 3 приведен список методов сборных конструкций, доступных в PL/SQL.
Таблица 3 Методы сборных конструкций
Метод
Описание
EXISTS(x)
Возвращает TRUE, если существует x-й элемент вложенной таблицы или изменяемого массива. В противном случае возвращает FALSE.
COUNT
Возвращает число элементов, находящихся в данный момент во вложенной таблице или в изменяемом массиве.
LIMIT
Возвращает максимальное число элементов, которое может содержать изменяемый массив.
FIRST
Возвращает первый компонент вложенной таблицы или изменяемого массива.
LAST
Возвращает последний компонент вложенной таблицы или изменяемого массива.
PRIOR(x)
Возвращает компонент, предшествующий x-тому компоненту вложенной таблицы или изменяемого массива.
NEXT(x)
Возвращает компонент, следующий за x-м компонентом вложенной таблицы или изменяемого массива.
EXTEND(x,y)
Добавляет x копий y-го элемента вложенной таблицы или изменяемого массива.
TRIM(x)
“Вырезает” x элементов с конца вложенной таблицы или изменяемого массива.
DELETE(x)
Удаляет некоторые или все элементы вложенной таблицы или изменяемого массива.
Для использования какого-либо метода сборных конструкций в операторе PL/SQL задается имя сборной конструкции (вложенной таблицы или изменяемого массива) с указанием в качестве суффикса (при помощи уточняющей записи через точку) метода сборных конструкций. В следующих операторах PL/SQL применяются методы сборных конструкций:
В литературе [2] курсоры иногда называют рабочей областью SQL – оператора. Однако точнее его можно определить как указатель на текущую строку результирующего множества оператора (рабочей области). В интерфейсе ODBC смысл курсора именно такой. Для PL/SQL вполне может подойти и определение курсора как рабочей области SQL – оператора, поскольку в нем задание оператора непосредственным образом сопряжено с объявлением курсора.
Операторы select возвращающие одну строку обрабатываются СУБД автоматически, т. е. она сама создаёт курсор и считывает данные посредством него из результирующего вектора. Для обработки строк запроса, возвращающего несколько строк, приложение должно объявлять курсор явно, указав его имя, а затем ссылаться на него при обработке строк по очереди. При обработке строк следует иметь в виду, что курсор устанавливается перед первой строкой результирующего множества, сформированного СУБД по выполнении запроса и сохраненного на сервере БД. Следующий пример демонстрирует процедуру объявления курсоров в блоке объявлений программ PL/SQL.
declare
cursor part_cur is select * from parts;
cursor cust_cur (state_id char) is
select id, l_name, f_name, phone
from customers
where state=state_id;
Здесь part_cur – это простой курсор, соответствующий всем строкам и столбцам таблицы parts, cust_cur – пример параметризованного курсора с параметром state_id.
После объявления курсора программа PL/SQL может открывать и выбирать записи в курсоре для поочередной обработки конкретных строк информации баз данных.