Учебно-справочное пособие по СУБД Informix


Курсоры



Курсоры

Если запрос к таблице возвращает несколько (больше одной) строк, то для их обработки используется так называемый курсор - указатель во множестве строк, выбранных оператором SELECT. Оператором DECLARE объявляется курсор для запроса, оператором OPEN этот запрос фактически выполняется и выбранные строки выделяются. Курсор устанавливается на первую из выбранных строк. С помощью оператора FETCH вы можете брать очередную строку, на которую указывает курсор, и помещать ее в свои программные переменные. Курсор после этого смещается на следующую строку.
С помощью конструкции циклической FOREACH имя_курсора ... END FOREACH можно перебрать все строки, выбранные оператором SELECT. Оператор OPEN в этом случае не нужен. DATABASE zawod DEFINE zap RECORD LIKE kadry.* DECLARE curs1 CURSOR FOR select * from kadry where datarovd>"9/25/1973"

# в цикле FOREACH выводим на экран все строки таблицы kadry, # в которых столбец datarovd содержит дату после 25 сентября # 1973 года. FOREACH curs1 INTO zap.* # Берем очередную строку и по- # мещаем ее в запись zap MESSAGE zap.* # Выводим запись zap на экран PROMPT "Еще ?" FOR CHAR c END FOREACH # Конец цикла FOREACH
В следующем примере строки выбираемые из таблицы kadry через курсор curs2 помещаются в массив z1 (но не более 100 строк). DATABASE zawod DEFINE z1 ARRAY[100] OF RECORD LIKE kadry.*, counter int

DECLARE curs2 CURSOR FOR SELECT * FROM kadry WHERE datarovd<"9/26/1973" OPEN curs2

FOR counter=1 TO 100

FETCH curs2 INTO z1[counter].* # взять очередную строку и поместить ее в следующий элемент # массива z1

IF status=NOTFOUND THEN # если выбранные сроки кончились, закончить цикл EXIT FOR END IF

END FOR

LET counter=counter-1 MESSAGE "В массив z1 прочитано ",counter, " записей"
Этот пример демонстрирует еще одно использование переменной status. Если оператор FETCH пытается взять сроку из курсора когда тот уже пуст, то значение переменной status устанавливается равным символической константе NOTFOUND, имеющей значение 100.


Начало  Назад  Вперед



Книжный магазин