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

Синтаксис

     
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 (см. документы РСКЮ.10007-60 34 01-1 «Запуск и останов СУБД ЛИНТЕР в среде ОС Windows», подраздел «Ключи совместимости с SQL-стандартом и другими СУБД»«Запуск и останов СУБД ЛИНТЕР в среде ОС Windows», подраздел «Ключи совместимости с SQL-стандартом и другими СУБД» и РСКЮ.10007-60 34 01-1 «Запуск и останов СУБД ЛИНТЕР в среде ОС Linux, Unix», подраздел «Ключи совместимости с SQL-стандартом и другими СУБД»«Запуск и останов СУБД ЛИНТЕР в среде ОС Linux, Unix», подраздел «Ключи совместимости с SQL-стандартом и другими СУБД» «Запуск и останов СУБД ЛИНТЕР в среде ОС Linux, Unix», подраздел «Ключи совместимости с SQL-стандартом и другими СУБД»), то при выполнении FETCH при отсутствии следующей записи в курсоре будет генерироваться исключение 2 (NO_DATA).

Примеры

fetch a;

fetch b previous;

fetch c relative offset * size - 1;