Доступные версии документации

Выборка данных из открытого курсора

Синтаксис

     
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» и «СУБД ЛИНТЕР. Запуск и останов СУБД ЛИНТЕР в среде ОС UNIX, QNX»), то при выполнении FETCH при отсутствии следующей записи в курсоре будет генерироваться исключение 2 (NO_DATA).

Примеры

fetch a;

fetch b previous;

fetch c relative offset * size - 1;
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter