Выборка данных из открытого курсора
Синтаксис
FETCH <имя курсорной переменной> [<ориентация>] [INTO <переменная> [, …]];
Описание
Данный оператор выбирает очередную запись из курсора согласно ориентации. Записи курсора могут содержать не более 255 столбцов. Результаты записи доступны через переменные, заданные в опции INTO или через поля курсорной переменной, обращение к которым осуществляется следующим образом:
<имя курсорной переменной>.<имя поля>
<Ориентация> задается одним из следующих значений:
-
NEXT– следующая запись; -
PREVIOUS– предыдущая; -
FIRST– первая; -
LAST– последняя; -
ABSOLUTE <выражение>– запись с номером, вычисленным в выражении (типаINTEGERили типаSMALLINT); -
RELATIVE <выражение>– запись, расположенная на вычисленном в выражении расстоянии от текущей записи (расстояние должно быть целочисленным).
Если ориентация не задана, предполагается значение NEXT.
Для организации цикла по выборке используется комбинация операторов FETCH и обычного
цикла WHILE, в условии которого стоит вызов стандартной функции
outofcursor().
Кроме outofcursor есть еще функции
rowcount()
для получения количества записей выборки данных и
errcode()
для получения кода завершения (в случае, если он не перехватывается блоком обработки исключений).
create or replace procedure example_fetch() result int
declare
var s cursor(nm char(20));//
code
print ("Список моделей авто");//
open s for "select distinct model from auto;";//
while not outofcursor(s) loop
print (s.nm);//
fetch s;//
endloop
return 0;//
end;
Результат:
*** Message from Sored Procedure: Список моделей авто
*** Message from Sored Procedure: 124 SPORT COUPE
*** Message from Sored Procedure: 1275 GT
…
Описание конструкции INTO <переменная> [, …] приведено в пункте Выполнение запроса.
При попытке сделать FETCH для неоткрытого курсора генерируется исключение CURNOTOPEN.
Если при запуске ядра СУБД был задан ключ /COMPATIBILITY=NOREC_EXCEPTION (см. документы «Запуск и останов СУБД ЛИНТЕР в среде ОС Windows»,
раздел «Ключи совместимости с SQL-стандартом и другими СУБД»«Запуск и останов СУБД ЛИНТЕР в среде ОС Windows»,
раздел «Ключи совместимости с SQL-стандартом и другими СУБД»
и «Запуск и останов СУБД ЛИНТЕР в среде ОС Linux, Unix», раздел «Ключи совместимости с SQL-стандартом и другими СУБД»«Запуск и останов СУБД ЛИНТЕР в среде ОС Linux, Unix»,
раздел «Ключи совместимости с SQL-стандартом и другими СУБД»
«Запуск и останов СУБД ЛИНТЕР в среде ОС Linux, Unix»,
раздел «Ключи совместимости с SQL-стандартом и другими СУБД»),
то при выполнении FETCH при отсутствии следующей записи в курсоре будет генерироваться исключение 2 (NO_DATA).
Примеры
fetch a; fetch b previous; fetch c relative offset * size - 1;