Транзакции и курсоры
Перемещение курсора
Курсор поддерживает информацию о текущей позиции в итоговом наборе команды SELECT. Перемещение курсора к заданной записи выполняется командой MOVE. Синтаксис команды MOVE:
MOVE [ FORWARD | BACKWARD | RELATIVE ] [ число ALL | NEXT | PRIOR ] { IN | FROM } курсор
Как видно из приведенного объявления, синтаксис команды MOVE очень близок к синтаксису команды FETCH. Впрочем, команда MOVE никаких записей не возвращает и лишь перемещает текущую позицию курсора. Смещение задается целочисленной константой или ключевым словом ALL (перемещение в заданном направлении на максимально возможное расстояние), NEXT или PRIOR. В листинге 7.44 текущая позиция курсора перемещается на 10 записей вперед.
Листинг 7.44. Перемещение текущей позиции курсора.
booktown=# MOVE FORWARD 10 booktown-# IN all_books; MOVE
Закрытие курсора
Команда CLOSE закрывает ранее открытый курсор. Курсор также автоматически закрывается при выходе из транзакционного блока, в котором он находится, при фиксации транзакции командой COMMIT или ее откате командой ROLLBACK. Синтаксис команды CLOSE (курсор – имя закрываемого курсора):
CLOSE курсор
В листинге 7.45 курсор all_books закрывается и освобождает занимаемую им память, вследствие чего данные курсора становятся недоступными.
Листинг 7.45. Закрытие курсора.
booktown=# CLOSE al1_books; CLOSE booktown=# COMMIT: COMMIT