Закрытие динамического курсора

Назначение

После окончания работы с записями, возвращаемыми курсором, необходимо выполнить операцию закрытия курсора. При закрытии курсора выполняется обработка незавершенной транзакции (если она осталась в канале) в соответствии с заданным режимом, высвобождаются системные ресурсы СУБД ЛИНТЕР (занимаемый курсором канал, рабочая область ответа и др.).

Синтаксис
 
<​закрытие динамического курсора​>::=
EXEC SQL CLOSE :<​имя курсорной переменной​>;
Описание
  1. Параметр <​имя курсорной переменной​> задает курсор, который должен быть закрыт.

  2. Оператор закрывает курсор, возвращаемый хранимой процедурой.

    Примечание

    В группе связанных курсорных операций OPEN, FETCH, CLOSE должно использоваться либо <​имя курсора​>, либо <​имя курсорной переменной​>.

  3. Курсорная переменная может быть повторно использована. Приложение может сколь угодно раз открывать курсорную переменную, выполнять в нее выборку (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; /* только здесь освобождается память, занимаемая курсорной переменной */
…