Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Команда DECLARE CURSOR советы и хитрости PostgreSQL

Платформа PostgreSQL не поддерживает предложения WITH. Она позволяет возвращать результирующий набор данных в двоичном (BINARY), а не в текстовом формате. Хотя компилятор и не выдаст ошибок при встрече со многими ключевыми словами стандарта ANSI, реализация инструкции DECLARE CURSOR в PostgreSQL более ограничена, чем это может показаться на первый взгляд.

DECLARE имя_курсора [BINARY] [INSENSITIVE] [SCROLL] CURSOR FOR инструкция_select [FOR {READ ONLY | UPDATE [OF имя_столбца [, …]]}]

Где:

BINARY

Курсор будет извлекать данные в двоичном формате, а не в текстовом.

INSENSITIVE

Показывает, что данные, которые извлек курсор, не зависят от обновлений, вносимых другими процессами и курсорами. Однако такое поведение в PostgreSQL принято по умолчанию, поэтому наличие или отсутствие этого ключевого слова никакого влияния не оказывает.

SCROLL

Это предложение позволяет извлечь несколько строк в одной операции FETCH. Однако такое поведение в PostgreSQL принято по умолчанию, поэтому наличие или отсутствие этого ключевого слова никакого влияния не оказывает.

FOR (READ-ONLY | UPDATE}

Показывает, открывается курсор в режиме для чтения или в обновляемом режиме соответственно. Однако PostgreSQL поддерживает только курсоры только для чтения. Это означает, что предложение FOR READ-ONLY не оказывает никакого эффекта, а предложение FOR UPDATE (имя столбца) вызовет появление информационного сообщения об ошибке.

Система PostgreSQL закрывает существующий курсор, если создается заново объявленный курсор с тем же именем. Двоичные курсоры, как правило, работают быстрее, поскольку на сервере PostgreSQL данные хранятся в двоичном формате. Однако пользовательские приложения работают только с текстом. Следовательно, вам придется встраивать обработку двоичных данных для любых курсоров с предложением BINARY.

Система PostgreSQL разрешает использовать курсоры только внутри транзакции. Вам следует закрыть курсор в транзакционном блоке между BEGIN и COMMIT или ROLLBACK.

Платформа PostgreSQL не поддерживает явное использование инструкции OPEN. Курсоры считаются открытыми после объявления. Таким образом, чтобы объявить и открыть курсор в PostgreSQL, вы должны использовать примерно такой код:

DECLARE pub_cursor CURSOR FOR SELECT pub_name FROM publishers WHERE country ‘USA’;

Источник