×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.147. FETCH

6.1.147. FETCH

FETCH — извлечение строк из запроса с помощью курсора

Синтаксис

FETCH [ direction ] [ FROM | IN ] cursor_name

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

    NEXT
    PRIOR
    FIRST
    LAST
    ABSOLUTE count
    RELATIVE count
    count
    ALL
    FORWARD
    FORWARD count
    FORWARD ALL
    BACKWARD
    BACKWARD count
    BACKWARD ALL

Описание

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

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

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

Формы, использующие FORWARD и BACKWARD извлекают указанное количество строк, перемещаясь в прямом или обратном направлении, оставляя курсор на последней возвращенной строке (или после/перед всеми строками, если count превышает количество доступных строк).

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

Примечание

На этой странице описывается использование курсоров на уровне SQL-команд. Если вы пытаетесь использовать курсоры внутри PL/pgSQL функции, правила будут иными — см. Раздел 5.6.7.3.

Параметры

direction

direction определяет направление выборки и количество извлекаемых строк. Это может быть одно из следующих:

NEXT

Извлечь следующую строку. Это значение по умолчанию, если direction опущено.

PRIOR

Извлечь предыдущую строку.

FIRST

Извлечь первую строку запроса (аналогично ABSOLUTE 1).

LAST

Извлечь последнюю строку запроса (аналогично ABSOLUTE -1).

ABSOLUTE count

Извлечь count-ю строку запроса, или abs(count)-ю строку от конца, если count отрицательно. Позиционирование перед первой строкой или после последней строки, если count вне диапазона; в определенную, ABSOLUTE 0 позиционирует перед первой строкой.

RELATIVE count

Извлечь countn-ю следующую строку или abs(count)n-ю предыдущую строку, если count n отрицательно. RELATIVE 0 повторно извлекает текущую строку, если она существует.

count

Извлечь следующие count строки (аналогично FORWARD count).

ALL

Извлечь все оставшиеся строки (аналогично FORWARD ALL).

FORWARD

Извлекает следующую строку (аналогично NEXT).

FORWARD count

Извлечь следующие count строк. FORWARD 0 повторно извлекает текущую строку.

FORWARD ALL

Извлекает все оставшиеся строки.

BACKWARD

Извлекает предыдущую строку (аналогично PRIOR).

BACKWARD count

Извлекает предыдущие count строки (выполняя сканирование в обратном направлении). BACKWARD 0 повторно извлекает текущая строка.

BACKWARD ALL

Извлекает все предыдущие строки (выполняя сканирование в обратном направлении).

count

count — это целочисленная константа (возможно, со знаком), определяющая положение или количество извлекаемых строк. Для FORWARD и BACKWARD случаев указание отрицательного значения count равносильно изменению направления FORWARD и BACKWARD.

cursor_name

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

Вывод

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

FETCH count

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

Примечания

Курсор должен быть объявлен с опцией SCROLL , если планируется использовать любые варианты FETCH отличные от FETCH NEXT или FETCH FORWARD с положительным значением count. Для простых запросов Digital Q.DataBase позволит выполнять выборку в обратном направлении из курсоров, не объявленных с SCROLL, но на это поведение лучше не полагаться. Если курсор объявлен с NO SCROLL, выборка в обратном направлении не допускается.

ABSOLUTE выборки выполняются не быстрее, чем переход к нужной строке с помощью относительного перемещения: внутренняя реализация в любом случае должна пройти через все промежуточные строки. Отрицательные абсолютные выборки работают ещё медленнее: запрос должен быть прочитан до конца, чтобы найти последнюю строку, а затем пройден в обратном направлении оттуда. Однако возврат к началу запроса (как в случае с FETCH ABSOLUTE 0) выполняется быстро.

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

Примеры

В следующем примере показан обход таблицы с помощью курсора:

BEGIN WORK;

-- Настройка курсора:
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;

-- Извлечение первых 5 строк из курсора liahona:
FETCH FORWARD 5 FROM liahona;

 code  |          название          | 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

-- Извлечь предыдущую строку:
FETCH PRIOR FROM liahona;

 code  |  title  | did | date_prod  |  kind  |  len
-------+---------+-----+------------+--------+-------
 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08

-- Закрыть курсор и завершить транзакцию:
CLOSE liahona;
COMMIT WORK;

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

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

Значение FETCH формы, включающие FORWARD и BACKWARD, а также формы FETCH count и FETCH ALL, в которых FORWARD подразумевается, являются Digital Q.DataBase расширениями.

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

См. также

CLOSE, DECLARE, MOVE
Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению