Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

FETCH

Получает результат запроса с помощью курсора.

Синтаксис

FETCH [<forward_direction> {FROM | IN}] <cursor_name>

где forward_direction может быть пустым или иметь одно из следующих значений:

    NEXT
    FIRST
    ABSOLUTE <count>
    RELATIVE <count>
    <count>
    ALL
    FORWARD
    FORWARD <count>
    FORWARD ALL

Описание

FETCH получает строки с помощью ранее созданного курсора.

ПРИМЕЧАНИЕ

Нельзя использовать FETCH для параллельного курсора (PARALLEL RETRIEVE CURSOR) — для получения строк из него необходимо использовать RETRIEVE.

ПРИМЕЧАНИЕ

На этой странице описывается использование курсоров на уровне SQL-команд. При использовании курсоров в функциях PL/pgSQL применяются другие правила.

С курсором связана позиция, которая используется командой FETCH. Позиция курсора может находиться перед первой строкой результата запроса, на любой конкретной строке результата или после последней строки. При создании курсор позиционируется перед первой строкой результата. После получения строк курсор устанавливается на последнюю извлеченную строку. Если команда FETCH выходит за пределы доступных строк, курсор остается в позиции после последней строки. Команда FETCH ALL всегда оставляет курсор в позиции после последней строки.

Формы NEXT, FIRST, ABSOLUTE и RELATIVE возвращают одну строку после соответствующего перемещения курсора. Если такая строка отсутствует, возвращается пустой результат, а курсор остается в позиции перед первой строкой или после последней строки — в зависимости от ситуации.

Формы с FORWARD возвращают указанное количество строк, перемещая курсор вперед и оставляя его на последней возвращенной строке (или после всех строк, если значение count превышает количество доступных строк). Обратите внимание, что в Greengage DB невозможно перемещать курсор назад, поскольку прокручиваемые курсоры не поддерживаются. Команда FETCH позволяет перемещать курсор только вперед.

Команды RELATIVE 0 и FORWARD 0 запрашивают текущую строку без перемещения курсора, то есть повторно возвращают последнюю полученную строку. Операция завершается успешно, если курсор не находится в позиции перед первой строкой или после последней строки; в противном случае строка не возвращается.

Выходные данные

При успешном выполнении команда FETCH возвращает тег команды вида:

FETCH <count>

где count — количество полученных строк (может быть равно нулю). Обратите внимание, что в psql тег команды не отображается, поскольку вместо него выводятся сами строки результата.

Параметры

Параметр Описание

forward_direction

Определяет направление выборки и количество возвращаемых строк. В Greengage DB поддерживается только перемещение курсора вперед. Может принимать одно из следующих значений:

  • NEXT — получить следующую строку. Используется по умолчанию, если direction не указан.

  • FIRST — получить первую строку результата запроса (эквивалентно ABSOLUTE 1). Допускается только при первом вызове FETCH для данного курсора.

  • ABSOLUTE <count> — получить строку с номером count. Если count выходит за пределы диапазона, курсор перемещается в позицию после последней строки. Допускается только в том случае, если указанная строка находится перед текущей позицией курсора.

  • RELATIVE <count> — получить строку, расположенную на count строк перед текущей позицией курсора. Значение RELATIVE 0 повторно возвращает текущую строку, если она существует. Допускается только при перемещении курсора вперед.

  • count — получить следующие count строк (эквивалентно FORWARD <count>).

  • ALL — получить все оставшиеся строки (эквивалентно FORWARD ALL).

  • FORWARD — получить следующую строку (эквивалентно NEXT).

  • FORWARD <count> — получить следующие count строк. Значение FORWARD 0 повторно возвращает текущую строку.

  • FORWARD ALL — получить все оставшиеся строки.

cursor_name

Имя открытого курсора

Примечания

Greengage DB не поддерживает прокручиваемые курсоры, поэтому команду FETCH можно использовать только для перемещения позиции курсора вперед.

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

Команда DECLARE используется для объявления курсора. Для изменения позиции курсора без получения данных используйте команду MOVE.

Примеры

Начало транзакции:

BEGIN;

Создание курсора:

DECLARE mycursor CURSOR FOR SELECT * FROM films;

Получение первых 5 строк из курсора mycursor:

FETCH FORWARD 5 FROM mycursor;

Результат:

 code  |          title          | did | date_prod  |   kind   |  len
-------+-------------------------+-----+------------+----------+-------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama    | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romantic | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Action   | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama    | 02:28

Закрытие курсора и завершение транзакции:

CLOSE mycursor;
COMMIT;

Изменение столбца kind таблицы films для строки, на которой находится текущая позиция курсора c_films:

UPDATE films
SET kind = 'Dramatic'
WHERE CURRENT OF c_films;

Совместимость

Стандарт SQL допускает использование курсоров только во встраиваемом SQL и в модулях. Greengage DB также поддерживает использование курсоров в интерактивном режиме.

Описанный здесь вариант FETCH возвращает данные так же, как команда SELECT, а не помещает их в переменные хоста. За исключением этого, команда FETCH совместима со стандартом SQL с учетом описанных расширений.

Формы FETCH с FORWARD, а также формы FETCH <count> и FETCH ALL, в которых FORWARD подразумевается, являются расширениями Greengage DB. Вариант BACKWARD не поддерживается.

Стандарт SQL допускает только использование ключевого слова FROM перед именем курсора; возможность использовать IN или опускать ключевое слово является расширением.

См. также