Закрытие динамического курсора
Назначение
После окончания работы с записями, возвращаемыми курсором, необходимо выполнить операцию закрытия курсора. При закрытии курсора выполняется обработка незавершенной транзакции (если она осталась в канале) в соответствии с заданным режимом, высвобождаются системные ресурсы СУБД ЛИНТЕР (занимаемый курсором канал, рабочая область ответа и др.).
Синтаксис
< закрытие динамического курсора >::= EXEC SQL CLOSE :< имя курсорной переменной >;
Описание
-
Параметр
< имя курсорной переменной >
задает курсор, который должен быть закрыт. -
Оператор закрывает курсор, возвращаемый хранимой процедурой.
Примечание
В группе связанных курсорных операций
OPEN
,FETCH
,CLOSE
должно использоваться либо< имя курсора >
, либо< имя курсорной переменной >
. -
Курсорная переменная может быть повторно использована. Приложение может сколь угодно раз открывать курсорную переменную, выполнять в нее выборку (
FETCH
), закрывать курсорную переменную – все это можно осуществлять до отсоединения от ЛИНТЕР-сервера. После повторного соединения с ЛИНТЕР-сервером курсорной переменной должна быть вновь выделена память.
Пример
. . . EXEC SQL BEGIN DECLARE SECTION; CURSOR Cr; int Var; EXEC SQL END DECLARE SECTION; EXEC SQL ALLOCATE :Cr; /* выделяем память под динамический курсор */ EXEC SQL EXECUTE BEGIN :Cr = stored_proc(); /* исполняем хранимую процедуру, которая возвращает курсор */ END; END-EXEC; EXEC SQL FETCH :Cr INTO :Var; /* работаем с выборкой */ . . . EXEC SQL CLOSE :Cr; /* закрываем динамический курсор. Память не освобождается! */ EXEC SQL DEALLOCATE :Cr ;/* только здесь освобождается память, занимаемая курсорной переменной */ . . .