- •Cтатический и динамический sql
- •Статический sql
- •Основная программа
- •Переменные во встроенном sql
- •Применение into-переменных
- •Переменные связи
- •Курсоры
- •Обработка null-значений
- •Позиционированные операторы
- •Обработка ошибок
- •Создание операторов динамического sql
- •Одношаговый интерфейс
- •Многошаговый интерфейс
- •Динамические параметры
- •Динамические курсоры
Динамические курсоры
В динамическом SQL можно использовать не только курсоры встроенного SQL (создаваемые статически оператором DECLARE CURSOR), но и два дополнительных типа курсоров:
-
объявляемые курсоры (declared cursors), создаваемые как DECLARE CURSOR;
-
размещаемые курсоры (allocated cursors), создаваемые как ALLOCATE CURSOR . Этот тип курсоров иногда называется выделенными курсорами.
Объявляемые и размещаемые курсоры могут иметь динамические параметры.
Для создания курсоров используются следующие операторы:
-
ALLOCATE CURSOR, в котором курсор указывается идентификатором переменной, описывающей SQL-оператор;
-
DECLARE CURSOR, в котором курсор указывается идентификатором откомпилированного SQL-оператора.
Например:
str1:='INSERT INTO tbl1 VALUES (1,10) ';
EXEC SQL ALLOCATE cur1 CURSOR FOR :str1;
EXEC SQL PREPARE stmt1 FROM :str1;
EXEC SQL DECLARE cur2 CURSOR FOR stmt1;
Открываются и закрываются динамические курсоры, как и статически создаваемые, операторами OPEN и CLOSE. Но при открытии курсора, имеющего динамические параметры, должна быть указана фраза USING.
Например:
str1:='SELECT f2 FROM tbl1 WHERE f1=? ';
EXEC SQL ALLOCATE cur1 CURSOR FOR :str1;
EXEC SQL OPEN cur1 USING :f2;
EXEC SQL FETCH cur1 INTO :f1;
Во фразе INTO оператора FETCH может быть указан как список INTO-переменных, так и SQL-дескриптор.