Явный курсор

  • Часть 1
  • | 2

Работа с явным курсором предполагает его определение, связывание с ним запроса SELECT, открытие, выборку данных из курсора и его закрытие.

Для определения явного курсора и связывания с ним запроса SELECT используется следующий оператор:

DECLARE [VARIABLE] имя_курсора CURSOR FOR (<запрос_select>);. Для открытия курсора используется следующий оператор:

OPEN имя_курсора;. Для выборки данных из курсора используется следующий оператор:

FETCHимя_курсора INTO:<имя_переменной1> [, :<имя_переменной2> ...];. Для закрытия курсора используется следующий оператор:

CLOSE имя_курсора;. Примечание. Команды OPEN, FETCH и CLOSE, используемые для работы с явным курсором, нельзя применять для работы с неявным курсором.

Объявление курсора должно помещаться в начале триггера, ХП или неименованного выполняемого блока (заданного с помощью EXECUTE BLOCK), подобно объявлению обычных локальных переменных.

Например, в теле ХП объявление и использование явного курсора может выглядеть следующим образом: DECLARE Aname CHAR(31);

DECLARE с CURSOR FOR (SELECT Fio FROM Abonent); BEGIN OPEN c;

WHILE (1 = 1) DO BEGIN

FETCH c INTO :Aname;

IF (ROW_COUNT = 0) THEN

LEAVE; SUSPEND; END

CLOSEc; END.

В данном примере показано, как может быть организована выборка данных с использованием явного курсора. Организуется цикл WHILE, внутри которого контекстная переменная ROW_COUNT проверяет, возвращает ли последняя выборка (FETCH) из явного курсора строку данных. Если нет, то происходит выход из цикла WHILE с помощью оператора LEAVE и закрытие курсора.

Следует помнить, что имена курсоров должны быть уникальными в контексте того модуля, где курсоры используются. Т.е. каждый явный и неявный курсор (если для него объявлено имя с помощью конструкции AS CURSOR имя_курсора) должны иметь различные имена. Однако допускается совпадение имени курсора с именем любой переменной, используемой в том же самом модуле.

предыдущаяследующая