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

Назначение

Вид курсора и способ объявления курсора зависят от того, каким методом будет формироваться выборка данных: с помощью select-запроса (статический курсор) или с помощью хранимой процедуры, возвращающей в качестве ответа тип данных «курсор» (динамический курсор).

Синтаксис
 
< объявление статического курсора >::=
EXEC SQL DECLARE < имя курсора >
  [SCROLL | INSENSITIVE ] CURSOR [FOR < предложение >];
< имя курсора >::= < идентификатор > | < строковый литерал >
< предложение >::= < переменная встроенного языка типа «предложение» >
  |< непосредственно предложение SQL >
  | < строковый литерал >
  |< переменная основного языка >
Описание
  1. Конструкция SCROLL | INSENSITIVE введена для совместимости синтаксиса со стандартом SQL93. В данной версии встроенного SQL не обрабатывается. Если такая конструкция задается, появляется предупреждение «Опция не поддерживается».

  2. < Предложение > задает предложение, потенциально возвращающее множественную выборку данных. < Предложение > может быть представлено 3 способами:

    • ссылкой на имя предложения (вариант < имя предложения >), содержащего запрос. В этом случае данное предложение должно быть предварительно подготовлено к выполнению с помощью оператора PREPARE, например:

      EXEC SQL BEGIN DECLARE SECTION;
      char*query="SELECT * FROM test WHERE name LIKE :v1 ORDER BY 1");;
      EXEC SQL END DECLARE SECTION;
      EXEC SQL PREPARE ST FROM :query;
      EXEC SQL DECLARE CR CURSOR_PCI FOR ST; /* только декларация курсора Оператор не влечет за собой создания кода */
    • непосредственно (вариант < предложение SQL > или < строковый литерал >), например:

      EXEC SQL DECLARE CR CURSOR FOR “select name from person”; /* создаем курсор из предложения SQL, заданного строковым
      литералом */
      EXEC SQL DECLARE CR CURSOR_PCI FOR select name from person where id >:ident; /* создаем курсор из предложения SQL,
      заданного непосредственно и привязываем переменную ident */

      В этом случае оператор влечет за собой создание кода после претрансляции.

    Примечания

    1. В двух последних случаях автоматически выполняется оператор PREPARE для неименованного предложения. Явное выполнение оператора PREPARE нужно в том случае, если SQL-запросу необходимо присвоить имя для возможной ссылки на этот запрос в других операторах программы.

    2. В качестве SQL-запроса при объявлении курсора можно задать любой запрос (не обязательно возвращающий множественную выборку данных, например, DROP TABLE). В этом случае запрос будет отработан, и при его нормальном выполнении сформируется код завершения «Нет данных».

  3. Объявленный таким способом курсор может использоваться только для select-запросов.

  4. Со статическим курсором допускается выполнять следующие действия:

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

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

    • использовать в позиционных SQL-запросах (с конструкцией CURRENT OF …);

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

    • закрыть курсор с помощью оператора CLOSE.