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

Назначение

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

Синтаксис
 
< закрытие динамического курсора >::=
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 ;/* только здесь освобождается память, занимаемая курсорной переменной */
. . .