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

Назначение

Вид курсора и способ объявления курсора зависят от того, каким методом будет формироваться выборка данных: с помощью 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.