Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
17.04.2018
Размер:
75.26 Кб
Скачать

Цикл while

Еще одной разновидностью цикла является цикл WHILE. Он хорошо подходит в ситуациях, когда количество итераций заранее неизвестно и определяется некоторым внешним фактором. Цикл WHILE имеет следующий синтаксис:

WHILE условие_выхода

LOOP

операторы;

END LOOP;

Приведенный ниже пример использует цикл WHILE для печати первых десяти чисел:

DECLARE

just_a_num NUMBER := 1;

BEGIN

WHILE (just_a_num <= 10)

LOOP

dbms_output .put_line (just_a_num) ;

just_a_num := just_a_num + 1;

END LOOP;

END;

/

Условие WHILE проверяется перед каждым входом в цикл. Если оно имеет значение "истина", то выполняется очередная итерация.

Цикл for

В цикле FOR для подсчета итераций используется переменная-счетчик, называемая также индексом цикла (loop index). По завершении каждой итерации счетчик увеличивается, начиная с нижнего предела, или уменьшается, начиная с верхнего предела. Как только его значение выйдет за указанный диапазон, цикл завершается. Синтаксис выглядит следующим образом:

FOR счетчик IN [REVERSE] нижняя_граница .. верхняя_граница

LOOP

операторы;

END LOOP;

Печать чисел реализуется циклом FOR в следующем блоке:

BEGIN

FOR just_a_num IN 1..10

LOOP

dbms_output.put_line(just_a_num);

END LOOP;

END;

/

Если использовать в этом цикле FOR команду REVERSE, то числа будут показаны в обратном порядке — от 10 до 1.

6.3. Курсоры

Курсор — это исключительно важная конструкция PL/SQL, лежащая в основе взаимодействия PL/SQL и SQL. Название "курсор" означает "текущий набор записей". Курсор представляет собой специальный элемент PL/SQL, с которым связан SQL-оператор SELECT. Используя курсор, можно отдельно обрабатывать каждую строку связанного с ним SQL-оператора. Курсор объявляется в секции объявлений базового блока. Он открывается командой OPEN, а выборка строк осуществляется с помощью команды FETCH.

После завершения всей обработки курсор закрывается командой CLOSE. Закрытие курсора освобождает те системные ресурсы, которые использовались, пока он был открыт. Строки, выбранные курсором, можно заблокировать, чтобы предотвратить их модификацию другими пользователями. Закрытие курсора или выполнение явной операции COMMIT или ROLLBACK приведет к разблокированию строк.

Для SQL-операторов, используемых в коде PL/SQL, применяются скрытые, или неявные (implicit), курсоры,которые рассмотриваются в следующей теме, а в этом разделе будут использованы явные (explicit) курсоры, т.е. те, которым присвоено имя.

Объявление курсора и атрибуты курсора

Курсор объявляется в процедуре PL/SQL следующим образом:

CURSOR имя_курсора [(параметр_1 [, параметр_2...])]

[RETURN спецификация_возврата]

IS

оператор_select

[FOR UPDATE

[OF таблица_или_столбец_1

[, таблица_или_столбец_2...]

]

]

Параметры курсора похожи на параметры процедуры, за тем исключением, что они всегда являются входными (IN). Использование параметров OUT или IN OUT невозможно, поскольку курсор не может их модифицировать. Параметры используются в конструкции WHERE курсорного оператора SELECT. Спецификация возврата показывает, записи какого типа будут выбираться оператором SELECT. Таблица_или_столбец — это имя столбца, который предстоит обновлять, или имя таблицы, в которой предстоит удалять или обновлять строки. Оно должно входить в число имен таблиц и столбцов, указанных в операторе SELECT курсора, и предназначено для документирования, показывая, какие элементы могут быть потенциально модифицированы кодом, использующим данный курсор. Команда FOR UPDATE блокирует строки, выбранные оператором SELECT при открытии курсора. Строки остаются заблокированными до тех пор, пока не закроется курсор не закроется рассмотренными выше способами.

Курсор имеет ряд индикаторов, показывающих его состояние. Они называются атрибутами курсора и приведены в табл. 6.1.

Таблица 6.1.

Атрибуты курсора

Атрибут

Описание

имя_курсора%ISOPEN

Позволяет проверить, открыт ли курсор. Если курсор имя_курсора уже открыт, возвращается значение TRUE

имя_курсора%ROWCOUNT

Количество строк таблицы, возвращенных оператором SELECT курсора

имя_курсора%FOUND

Позволяет проверить, была ли успешной последняя попытка получения записи из курсора. Если запись была выбрана, возвращается значение TRUE

имя_курсора%NOTFOUND

Противоположен атрибуту FOUND. Если записей больше не найдено, возвращается значение TRUE

Соседние файлы в папке Lab5