FETCH
Чтение записи из набора данных, связанного с курсором.
PSQL
FETCH [<fetch_scroll> FROM] cursor_name [INTO [:]varname [, [:]varname ...]]; <fetch_scroll> ::= NEXT | PRIOR | FIRST | LAST | RELATIVE n | ABSOLUTE n
Параметр | Описание |
---|---|
cursor_name |
Имя курсора.Курсор с таким именем должен быть предварительно объявлен с помощью оператора |
var_name |
PSQL переменная. |
n |
Целое число. |
Оператор FETCH
выбирает следующую строку данных из результирующего набора данных курсора и присваивает значения столбцов в переменные PSQL.Оператор FETCH
применим только к курсорам, объявленным в операторе DECLARE … CURSOR
.
Оператор FETCH
может указывать в каком направлении и на сколько записей продвинется позиция курсора.Предложение NEXT
допустимо использовать как с прокручиваемыми, там и не прокручиваемыми курсорами.
Остальные предложения допустимо использовать только с прокручиваемыми курсорами.
NEXT
-
перемещает указатель курсора на 1 запись вперёд. Это действие по умолчанию.
PRIOR
-
перемещает указатель курсора на 1 запись назад.
FIRST
-
перемещает указатель курсора на первую запись.
LAST
-
перемещает указатель курсора на последнюю запись.
ABSOLTE n
-
перемещает указатель курсора на указанную запись;n — целочисленное выражение, где
1
обозначает первую строку.Для отрицательных значений абсолютная позиция берется с конца набора результатов, поэтому-1
указывает последнюю строку,-2
- предпоследнюю строку и т. д.Нулевое значение (0
) будет располагаться перед первой строкой. RELATIVE n
-
перемещает курсор на n строк из текущей позиции;положительные числа перемещают указатель вперед, а отрицательные числа — назад;использование нуля (
0
) не приведет к перемещению курсора, аROW_COUNT
будет установлено в ноль, поскольку новая строка не была выбрана.
Необязательное предложение INTO
помещает данные из текущей строки курсора в PSQL переменные.
Разрешается использовать имя курсора как переменную типа запись (аналогично OLD и NEW в триггерах), что позволяет получить доступ к столбцам результирующего набора (т.е. cursor_name . columnname).
-
Для разрешения неоднозначности при доступе к переменной курсора перед именем курсора необходим префикс двоеточие;
-
К переменной курсора можно получить доступ без префикса двоеточия, но в этом случае, в зависимости от области видимости контекстов, существующих в запросе, имя может разрешиться как контекст запроса вместо курсора;
-
Переменные курсора доступны только для чтения;
-
Чтение из переменной курсора возвращает текущие значения полей. Это означает, что оператор
UPDATE
(с предложениемWHERE CURRENT OF
) обновит также и значения полей переменной курсора для последующих чтений. Выполнение оператораDELETE
(с предложениемWHERE CURRENT OF
) установитNULL
для значений полей переменной курсора для последующих чтений.
Для проверки того, что записи набора данных исчерпаны, используется контекстная переменная ROW_COUNT
, которая возвращает количество строк выбранных оператором.Если произошло чтение очередной записи из набора данных, то ROW_COUNT равняется единице, иначе нулю.