Иллюстрированный самоучитель по PostgreSQL

Транзакции и курсоры

Выборка из курсора

Выборка записей из курсора производится командой 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)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.