Базы данных - модели, разработка, реализация



         

Оператор определения курсора


Стандарт определяет следующий синтаксис оператора определения курсора:

  • DECLARE CURSOR FOR
  • ::=
  • Имя курсора - это допустимый идентификатор в базовом языке программирования.

    В объявлении курсора могут быть использованы базовые переменные. Однако необходимо помнить, что на момент выполнения оператора OPEN значения всех базовых переменных, используемых в качестве входных переменных, связанных с условиями фильтрации значений в базовом запросе, должны быть уже заданы.

    Определим курсор, который содержит список всех должников нашей библиотеки. Должниками назовем читателей, которые имеют на руках хотя бы одну книгу, срок сдачи которой уже прошел.

  • DECLARE Debtor_reader_cursor CURSOR FOR
  • SELECT READERS. FIRST_NAME. READERS.LAST_NAME. READERS.ADRES,
  • READERS HOME_PHON. READERS WORK_PHON, BOOKS.TITLE
  • FROM READERS,BOOKS,EXEMPLAR
  • WHERE READERS.READER_ID = EXEMPLAR.READER_ID AND
  • BOOKS.ISBN = EXEMPLARE.ISBN AND
  • EXEMPLAR.DATA_OUT > Getdate( )
  • ORDER BY READERS.FIRST_NAME
  • При определении курсора мы снова использовали функцию Transact SQL GetdateO, которая возвращает значение текущей даты. Таким образом, определенный курсор будет создавать набор строк, содержащих перечень должников, с указанием названий книг, которые они не вернули вовремя в библиотеку.

    В соответствии со стандартом SQL2 Transact SQL содержит расширенное определение курсора

  • DECLARE [INSENSITIVE] [SCROLL] CURSOR
  • FOR
  • [FOR {READ ONLY | UPDATE [OF [....n]]}]
  • 253

    Параметр INSENSITIVE (нечувствительный) определяет режим создания набора строк, соответствующего определяемому курсору, при котором все изменения в исходных таблицах, произведенные после открытия курсора другими пользователями, не видны в нем. Такой набор данных нечувствителен ко всем изменениям, которые могут проводиться другими пользователями в исходных таблицах, этот тип курсора соответствует некоторому мгновенному слепку с БД.

    СУБД более быстро и экономно может обрабатывать такой курсор, поэтому если для вас действительно важно рассмотреть и обработать состояние БД на некоторый конкретный момент времени, то имеет смысл создать "нечувствительный курсор".




    Содержание  Назад  Вперед