Работа с явным курсором предполагает его определение, связывание с ним запроса 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 имя_курсора) должны иметь различные имена. Однако допускается совпадение имени курсора с именем любой переменной, используемой в том же самом модуле.
предыдущаяследующая