Транзакции и курсоры
Выборка из курсора
Выборка записей из курсора производится командой FETCH. Синтаксис команды FETCH:
FETCH [ FORWARD BACKWARD | RELATIVE ] [ число ALL | NEXT | PRIOR ] { IN | FROM } курсор
В этом объявлении курсор – имя курсора, из которого производится выборка записей. Курсор всегда указывает па "текущую" позицию итогового набора выполненной команды, а в выборке могут участвовать записи, находящиеся до или после текущей позиции. Направление выборки определяется ключевыми словами FORWARD и BACKUARD, но умолчанию используется прямая выборка (FORWARD). Ключевое слово RELATIVE не обязательно и поддерживается лишь для совместимости со стандартом SQL92.
Внимание
В команде также может использоваться ключевое слово ABSOLUTE, но в PostgreSQL 7.1.x возможности абсолютного позиционирования и выборки в курсорах не реализованы. Курсор использует относительное позиционирование и выводит сообщение о том, что абсолютное позиционирование не поддерживается.
За ключевым словом, идентифицирующим направление, может указываться следующий аргумент – количество записей. Допускается указание конкретного числа записей (в виде целочисленной константы) или одного из нескольких ключевых слов. Ключевое слово ALL означает, что команда возвращает все записи, начиная с текущей позиции курсора. С ключевым словом NEXT (используется по умолчанию) команда возвращает следующую запись от текущей позиции курсора. С ключевым словом PRIOR возвращается запись, находящаяся перед текущей позицией курсора.
Ключевые слова IN и FROM эквивалентны, из них в команде должно присутствовать одно.
В листинге 7.43 выбираются первые четыре записи итогового набора, на который ссылается курсор all_books. Направление не указано, поэтому по умолчанию используется ключевое слово FORWARD. Далее команда FETCH с ключевым словом NEXT выбирает пятую запись, после чего команда FETCH с ключевым словом PRIOR снова возвращается к четвертой записи.
Листинг 7.43. Выборка записей из курсора.
booktown=# FETCH 4 FROM all_books; Id | title | authored | suojectjd 7808 | The Shining | 4156 | 9 4513 | Dune 1 1866 | 15 4267 I 2001: A Space Odyssey | 2001 | 15 1608 I The Cat in the Hat j 1809 2 (4 rows) booktown=# FETCH NEXT FROM all_books; id | title | authorjd | subjectjd 1590 Bartholomew and the Oobleck 1809 2 (1 row) booktown=# FETCH PRIOR FROM all_books: id | title | authorjd subjectjd 1608 | The Cat in the Hat | 1809 | 2 (1 row)