Доступные версии документации

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

Назначение

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

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