Пока все строки не будут получены
Получение строки
Закрытие курсора
Курсоры действуют способом подобным обработке файла.
Декларирование курсоров
- только для операций чтения
- операций обновления
· Курсор только для чтения в своем предложении SELECT может содержать
- предложение DISTINCT
- функцию столбца
- предложения GROUP BY, HAVING, ORDER BY
- коррелированные подзапросы
- предложение FROM с более чем одной таблицей
- представления (view), доступные только для чтения
Курсоры могут быть одного из двух типов: только для чтения или для обновления тоже.
Курсоры только для чтения используются для чтения данных.
Обновляющий курсор декларируется с использованием предложения FOR UPDATE OF.
Декларировать курсор - Формат оператора
EXEC SQL
DECLARE <имя курсора> CURSOR FOR
SELECT <столбцы>
FROM <таблица>
WHERE <условие поиска>
Например:
EXEC SQL
DECLARE allrows CURSOR FOR
SELECT CRIME_CODE, CRIME
FROM CRIMES;
Allrows – имя декларируемого курсора. Этот курсор выбирает два столбца, CRIME_CODE и CRIME, из таблицы CRIMES.
Декларирование курсоров – Host-переменные
EXEC SQL
DECLARE arow CURSOR FOR
SELECT CRIME
FROM CRIMES
WHERE CRIME_CODE = :wanted;
Если требуется, могут использоваться индикаторные переменные.
Использование FETCHдля извлечения множества строк
- Множество строк
do
{
EXEC SQL
FETCH allrows
INTO :hostvar1, :hostvar2;
…
Обработка принятых данных
…
} while (SQLCODE == 0);
if (SQLCODE != 100)
{
… Код ошибки
Вывод на экран
…
}
· Для курсоров, которые возвращают более одной строки, мы должны разместить FETCH внутри цикла.
· Мы продолжаем получать данные до тех пор, пока команда FETCH не вернет SQLCODE 100 (строка не найдена).
Закрытие курсоров
EXEC SQL
CLOSE arow;
Когда процесс завершен, мы должны выполнить закрытие курсора. Это освобождает все буферы и рабочие области, выделенные DB2. Чтобы снова начать считывать результирующее множество, необходимо открыть курсор.
Декларирование курсоров для обновления
EXEC SQL
DECLARE updater CURSOR FOR
SELECT CRIME_CODE, CRIME
FROM CRIMES
WHERE CRIME_CODE = :wanted
FOR UPDATE OF CRIME;
Мы можем обновить строку, в позиции которой находится курсор.
Обновление строк используя курсор
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.