- •Модель клиент/сервер
- •Лексические единицы
- •Идентификаторы
- •Зарезервированные слова
- •Ограничители
- •Литералы
- •Комментарии
- •Блок pl/sql
- •Объявление переменных
- •Типы pl/sql
- •Числовые
- •Символьные
- •Семейство типов без обработки
- •Семейство типов даты.
- •Семейство типов rowid
- •Семейство логических типов
- •Семейство типов Trusted
- •Ссылочные типы.
- •Типы lob
- •Записи.
- •Использование %type, %rowtype
- •Подтипы, определяемые пользователями
- •Преобразование типов данных
- •Выражения и операции
- •Присваивание
- •Логические выражения
- •Управляющие структуры pl/sql
- •Операторы goto и метки
- •Использование sql в pl/sql
- •Связи баз данных
- •Ссылки на таблицы
- •Курсоры и курсорные переменные
- •Курсорные атрибуты
- •Циклы выборки
Курсорные атрибуты
В PL/SQL существуют четыре атрибута, которые могут быть применены к курсорам. Курсорные атрибуты добавляются к имени курсора в блоке PL/SQL. Эти атрибуты: %FOUND, %NOTFOUND, %ISOPEN и %ROWCOUNT.
%FOUND - это логический атрибут. Он возвращает TRUE, если при предшествующем считывании была выбрана строка, и FALSE — если строка выбрана не была.
%NOTFOUND ведет себя противоположно %FOUND: если предшествующее считывание возвращает строку — значение %NOTFOUND ложно. Атрибут %NOTFOUND возвращает TRUE, только если во время предшествующего считывания строка выбрана не была. Этот атрибут часто используется в качестве условия выхода из цикла выборки.
%ISOPEN Этот логический атрибут используется для курсор. Если открыт, то %FSOPEN возвращает TRUE.
%ROWCOUNT Этот числовой атрибут возвращает число строк, считанных курсором на данный момент, а не общее количество строк которые выбрал SELECT.
Циклы выборки
Цикл выборки (fetch loop) — это обычный цикл, в котором строки активного набора обрабатываются но порядку, одна за другой, а в качестве условий используются атрибуты курсора.
Однако существует специальная разновидность цикла FOR, в котором управление обработкой курсора осуществляется неявно. Используется следующий синтаксис:
FOR итератор IN курсор LOOP
/*операторы*/
END LOOP;
Здесь итератор играет роль счетчика цикла и одновременно содержит в себе строчку, считанную курсором на данном раунде. Считывание новой строчки происходит автоматически перед началом каждого раунда. Выход так же автоматический, как только %NOTFOUND окажется равным TRUE (неявно) перед очередным считыванием.