Объявление статического курсора
Назначение
Вид курсора и способ объявления курсора зависят от того, каким методом будет формироваться выборка данных: с помощью select-запроса (статический курсор) или с помощью хранимой процедуры, возвращающей в качестве ответа тип данных «курсор» (динамический курсор).
Синтаксис
<объявление статического курсора>::= EXEC SQL DECLARE <имя курсора> [SCROLL | INSENSITIVE ] CURSOR [FOR <предложение>]; <имя курсора>::= <идентификатор> | <строковый литерал> <предложение>::= <переменная встроенного языка типа «предложение»> |<непосредственно предложение SQL> | <строковый литерал> |<переменная основного языка>
Описание
-
Конструкция
SCROLL | INSENSITIVE
введена для совместимости синтаксиса со стандартом SQL93. В данной версии встроенного SQL не обрабатывается. Если такая конструкция задается, появляется предупреждение «Опция не поддерживается». -
<Предложение>
задает предложение, потенциально возвращающее множественную выборку данных.<Предложение>
может быть представлено 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 */
В этом случае оператор влечет за собой создание кода после претрансляции.
Примечания
-
В двух последних случаях автоматически выполняется оператор
PREPARE
для неименованного предложения. Явное выполнение оператораPREPARE
нужно в том случае, если SQL-запросу необходимо присвоить имя для возможной ссылки на этот запрос в других операторах программы. -
В качестве SQL-запроса при объявлении курсора можно задать любой запрос (не обязательно возвращающий множественную выборку данных, например,
DROP TABLE
). В этом случае запрос будет отработан, и при его нормальном выполнении сформируется код завершения «Нет данных».
-
-
Объявленный таким способом курсор может использоваться только для select-запросов.
-
Со статическим курсором допускается выполнять следующие действия:
-
открыть курсор посредством оператора
OPEN
; -
произвести выборку с помощью оператора
FETCH
; -
использовать в позиционных SQL-запросах (с конструкцией
CURRENT OF …
); -
работать с BLOB-данными посредством операторов
{ADD | GET | CLEAR} BLOB
; -
закрыть курсор с помощью оператора
CLOSE
.
-