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

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

Назначение

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

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter