Объявление динамического курсора

Назначение

Для объявления динамического курсора (курсорной переменной) служит тип данных CURSOR встроенного SQL, т.е. в секции объявления переменных встроенного SQL необходимо объявить переменную типа «курсор» (CURSOR). После объявления курсорная переменная может быть использована в качестве курсора встроенного языка. Область видимости этой переменной такая же, как любой другой переменной основного языка.

Синтаксис
 
< курсорная переменная >::=
   CURSOR < имя курсорной переменной >
Описание
  1. С динамическим курсором допускается выполнять следующие операции:

    • выделять память для курсора посредством оператора ALLOCATE;

    • открывать курсор путем исполнения хранимой процедуры, возвращающей тип данных «курсор». Явного оператора открытия курсора (типа открытия статического курсора) нет. Динамический курсор всегда открывается неявно путем присвоения ему вызова хранимой процедуры, возвращающей тип данных «курсор»;

    • производить выборку с помощью оператора FETCH;

    • работать с BLOB-данными посредством операторов {ADD | GET | CLEAR} BLOB;

    • завершать работу курсора с помощью оператора CLOSE;

    • освобождать ранее выделенную под курсор память посредством оператора DEALLOCATE.

  2. Динамический курсор нельзя применять в динамических SQL-предложениях. Он может использоваться только с операторами ALLOCATE, FETCH, FREE и CLOSE встроенного SQL. Конструкция DECLARE CURSOR не применяется к курсорной переменной.

  3. Нельзя применять FETCH к закрытой курсорной переменной.

  4. Нельзя применять FETCH к курсорной переменной без выделения ей памяти.

  5. Курсорная переменная не может быть загружена в таблицу БД.

  6. Курсорная переменная аналогична другим переменным основного языка и имеет область видимости в соответствии с правилами видимости переменных языка C/C++. Она может передаваться в качестве параметра функций, может быть объявлена внешней функцией в исходном файле. Можно определять функции, которые возвращают курсорные переменные или указатель (ссылку) на нее.

Пример
EXEC SQL BEGIN DECLARE SECTION;
   CURSOR proc_desc;
EXEC SQL END DECLARE SECTION;