Выборка данных из открытого курсора
Синтаксис
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;