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 равняется единице, иначе нулю.