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