Язык программирования баз данных Informix-4GL


Обработка многострочных запросов с использованием аппарата курсоров - часть 2


Оператор Declare не является активным оператором, он только устанавливает свойства курсора и выделяет для него память. Область действия курсора - от точки его объявления до конца файла. Примеры объявления курсора приведены ниже.

Открытие и закрытие курсора

Когда программа готова к использованию курсора, она его открывает (активизирует) оператором Open. По оператору Open ассоциированный с курсором оператор Select передается серверу базы данных, который начинает поиск соответствующих строк. Сервер обрабатывает этот запрос до момента нахождения или конструирования первой строки результата. Он реально не возвращает эту строку данных, но устанавливает код возврата в переменную STATUS (sqlca.sqlcode). Если переменная STATUS равен нулю, оператор синтаксически правилен и курсор готов к использованию. Оператор Close, напротив, переводит курсор в закрытое состояние и освобождает активное множество.

Курсорная выборка строк

Оператор Fetch служит для выборки строки результата: он именует курсор, переводит курсор к определенной строке активного множества и выбирает значения из этой строки. Оператор Fetch может также задавать имена главных переменных для приема данных в спецификаторе Into, который нужно включать либо в оператор Select, либо в оператор Fetch, но не в оба сразу. Вторая форма имеет то преимущество, что разные строки могут быть считаны в разные переменные. Если оператор Fetch перемещает курсор перед первой строкой или после последней строки, в переменную STATUS (sqlca.sqlcode) устанавливается код возврата NOTFOUND (100).

Последовательность выбора строк из активного множества определяется типом курсора. Последовательный курсор, будучи открыт один раз, читает строки из активного множества строго последовательно. Единственным значением спецификатора перемещения курсора, используемым по умолчанию, является next.

При необходимости выполнить группу действий для каждой строки результата (режим Row-by-Row) можно воспользоваться оператором FOREACH ... END FOREACH.


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



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