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