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

DECLARE

Определение нового курсора.

Синтаксис:

DECLARE курсор
[ BINARY ] [ INSENSITIVE ] [ SCROLL ]
CURSOR FOR запрос
[ FOR { READ ONLY | UPDATE [ OF поле [….]]}]

Параметры:

  • курсор. Имя нового курсора.
  • BINARY. Выборка данных производится в двоичном формате вместо принятого по умолчанию текстового формата.
  • INSENSITIVE. Ключевое слово INSENSITIVE означает, что данные, полученные с использованием курсора, не подвержены изменениям со стороны других процессов (и других курсоров). В PostgreSQL это требование выполняется автоматически, поскольку все операции с курсорами заведомо инкапсулируются в транзакциях. Параметр существует для совместимости с другими системами.
  • SCROLL. Ключевое слово SCROLL разрешает выборку нескольких записей при каждой операции FETCH. Режим поддерживается по умолчанию, поэтому наличие ключевого слова SCROLL ни па что не влияет.
  • запрос. Запрос SQL, по которому курсор производит выборку записей. Структура запроса приведена в описании команды SELECT.
  • READ ONLY. Курсор используется только для чтения данных. Наличие параметра READ ONLY ни на что не влияет, поскольку в PostgreSQL курсорам представляется доступ только для чтения.
  • UPDATE. Курсор используется для обновления таблиц. В PostgreSQL версии 7.1.x (последней на момент написания книги) обновление через курсоры не поддерживается.
  • поле. Список полей, обновляемых курсором. В PostgreSQL версии 7.1.x (последней на момент написания книги) обновление через курсоры не поддерживается.

Результаты:

  • SELECT. Сообщение выдается при успешном выполнении команды SELECT.
  • NOTICE: Closing pre-existing portal "курсор". Сообщение означает, что в текущем транзакционном блоке уже был объявлен курсор с заданным именем. В этом случае ранее объявленный курсор автоматически уничтожается.
  • ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks. Ошибка – попытка объявления курсора вне трапзакционного блока. Курсоры используются только в транзакционных блоках.

Описание

Команда DECLARE создает в транзакционном блоке курсор, предназначенный для выборки данных, полученных в результате запроса. Возвращаемые данные могут храниться в текстовом или двоичном формате. Курсоры поддерживаются только в контексте транзакций, при попытке их использования вне транзакционного блока выдается сообщение об ошибке.

Внимание
При использовании двоичных (BINARY) курсоров необходима осторожность, поскольку они не поддерживаются некоторыми клиентами
.

PostgreSQL не требует отдельного открытия курсоров – курсоры открываются автоматически при объявлении. Тем не менее препроцессор ecpg поддерживает команду OPEN для встроенных и интерактивных приложений SQL.

Пример

В следующем фрагменте объявляется курсор cur_publisher, который затем используется для выборки двух записей. В клиенте psql результаты выборки отображаются немедленно.

booktown=# BEGIN WORK; BEGIN
booktown=# DECLARE cur_publisher CURSOR FOR SELECT name FROM publishers: SELECT
booktown=# FETCH FORWARD 2 IN cur_publisher; name
Kids Can Press
Henry Holt & Company. Inc.
(2 rows)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.