Разработка приложений баз данных для СУБД Sybase SQL Anywhere

Использование курсоров в хранимых процедурах


Одним из способов возврата результатов работы хранимых процедур является формирование результирующего множества. Данное множество формируется при выполнении оператора SELECT. Оно записывается во временную таблицу - курсор. Применение курсора в процедурах осуществляется путем последовательного выполнения следующих шагов:

  • При помощи оператора DECLARE объявляется курсор для отдельного оператора SELECT или для отдельной процедуры.
  • Оператором OPEN производится открытие курсора.
  • Используя оператор FETCH, осуществляется установление указателя на требуемую запись курсора. При этом значения полей текущей записи присваиваются переменным, указываемым в операторе FETCH.
  • В процессе перемещения указателя текущей записи курсора при выходе указателя за пределы курсора выдается предупреждение row not found.
  • После того как курсор становится ненужным, он закрывается оператором CLOSE.
  • По умолчанию курсор закрывается автоматически в конце транзакции (операторы COMMIT или ROLLBACK). Если при объявлении курсора указана фраза WITH HOLD (с сохранением), то курсор закрывается только явным образом оператором CLOSE. Такое использование курсора снимает все проблемы с остановкой функционирования процедур в среде утилиты ISQL, формирующих результирующие множества. В этом случае отпадает необходимость использования оператора RESUME.

    В курсоре указатель может быть установлен:

  • до первой записи курсора;
  • на запись в пределах курсора;
  • за последнюю запись курсора.
  • Позиционирование курсора может осуществляться на:
  • первую/последнюю запись курсора;
  • на следующую/предыдущую запись;
  • на несколько записей вперед/назад относительно текущей записи;
  • на i-ю запись относительно начала курсора.
  • В соответствие с приведенными шагами рассмотрим пример обработки результатов работы процедуры Get_list_absent. Для этого создадим в учебных целях процедуру Count_publishers, которая для читателя по фамилии "Петрова В.А.", имеющей читательскую карточку с № 80, определяет количество книг, изданных в издательстве "Советское радио". Текст этой процедуры приводится ниже:



    Содержание раздела