Главная страница

Ане. МЕТОДИЧКА Full. Методические указания по выполнению лабораторных работ по дисциплине Базы и банки данных


Скачать 1.71 Mb.
НазваниеМетодические указания по выполнению лабораторных работ по дисциплине Базы и банки данных
Дата15.03.2023
Размер1.71 Mb.
Формат файлаdoc
Имя файлаМЕТОДИЧКА Full.doc
ТипМетодические указания
#993025
страница10 из 11
1   2   3   4   5   6   7   8   9   10   11

Лабораторная работа №11

«Курсоры»



Цель: изучить курсоры и научиться самостоятельно создавать их.
SQL-сервер способен возвращать в результате выполнения запроса сотни тысяч строк. Клиентские приложения не всегда могут справиться с такими объемами данных, т.к. для их хранения требуется много памяти. Решением этой проблемы является использование курсора.

Курсоры SQL-сервер представляют собой механизм обмена данными между сервером и клиентом. Курсор позволяет клиентским приложениям работать не с полным набором данных, а только с одной или несколькими строками.

Набор данных, имеющихся в таблице, называется полным набором строк. Набор строк, возвращаемый командой Select, называется результирующим набором. Курсоры работы с результирующим набором данных расширяют возможности пользователей по их обработке.

Скорость выполнения операций обработки данных с помощью курсора заметно ниже, чем у стандартных средств SQL-сервер.

Типы и поведение курсоров

Существует 4 основных типа курсоров, различающихся по предоставляемым возможностям. Тип курсора определяется на стадии его создания и не может быть изменен.

  1. Статические курсоры

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

  1. Динамические курсоры

При использовании динамических курсоров не создается полная копия исходных данных, а выполняется динамическая выборка данных из исходных таблиц при обращении пользователя к тем или иным данным. Сервер блокирует строки на время выборки и все изменения, вносимые пользователями в полный результирующий набор курсора, будут видны в курсоре при выборке. Если пользователь внес изменения в данные уже после из выборки курсором, то эти изменения не будут отражаться в курсоре.

  1. Последовательные курсоры

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

  1. Ключевые курсоры

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

Управление курсорами

При работе с курсором можно выделить четыре основные операции:

  1. Создание курсора

Перед тем как использовать курсор его необходимо создать.

  1. Открытие курсора

Сразу после создания курсор не содержит никаких данных, также как переменная после объявления не содержит значения. Операция открытия курсора наполняет курсор данными.

  1. Выборка из курсора и изменение строк данных с помощью курсора.

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

  1. Закрытие курсора

Когда все операции обработки данных завершены, и надобность в курсоре отпадает, его необходимо закрыть. При закрытии курсора сервер освобождает пространство в системной БД tempbd, выделенное курсором при его открытии.

  1. Освобождение курсора. Операция удаляет курсор как объект.

Примеры:

1. Курсор для просмотра информации о студентах и выдача информации об их количестве.

DECLARE curs1 CURSOR

GLOBAL /*Создается глобальный курсор, который будет существовать до закрытия данного соединения*/

SCROLL /*Создает прокручиваемый курсор*/

KEYSET /*Будет создан ключевой курсор*/

TYPE_WARNING

FOR

SELECT /*Какие поля будут показаны в курсоре*/

Студенты.Читательский_номер,Студенты.Имя, Студенты.Фамилия, Студенты.Отчество, Студенты.год_поступления,

Студенты.год_окончания,Студенты.факультет,Студенты.специальность,Студенты.форма_обучения,Студенты.номер_приказа

FROM Студенты /*Из какой таблицы выбираются данные*/

FOR READ ONLY /*Только для чтения*/
open global curs1 /*открываем глобальный курсор*/

DECLARE /*объявляем переменную*/

@@Counter int

SET @@Counter =@@CURSOR_ROWS /*присваиваем ей число рядов курсора*/

Select @@Counter /*выводим результат на экран*/

CLOSE curs1 /*закрываем курсор*/

DEALLOCATE curs1 /*освобождаем курсор*/
2. Курсор для просмотра заказов и подсчета общего количества заказанных книг.

DECLARE curs2 CURSOR

GLOBAL SCROLL KEYSET

TYPE_WARNING /*Сервер будет информировать пользователя о неявном изменении типа курсора, если он несовместим с запросом SELECT*/

FOR

SELECT /*Что будет показано в курсоре*/

Преподаватели.Фамилия, Преподаватели.Имя, Преподаватели.Отчество, Книга.Автор, Книга.Название, Заказы.Количество, Книга.Цена

FROM Книга INNER JOIN (Преподаватели INNER JOIN Заказы ON Преподаватели.Читательский_номер = Заказы.Читательский_номер)

ON Книга.ISBN = Заказы.ISBN

FOR UPDATE /*Курсор для обновления*/

open global curs2

DECLARE

@@Fam varchar(20),

@@Name varchar(20),

@@Sec_name varchar(20),

@@Autor varchar(20),

@@Nazv varchar(20),

@@Kolvo int,

@@Cena int,

@@Counter int,

@@Var1 int

SET @@Counter = 1

SET @@Var1 = 0

WHILE @@COUNTER< @@CURSOR_ROWS /*Пока счетчик просмотренных строк меньше их общего числа*/

BEGIN

FETCH curs2 INTO @@Fam,@@Name,@@Sec_name,@@Autor,@@Nazv,@@Kolvo /*Просматриваем строки и значения*/

SET @@Counter =@@Counter +1 /*Меняем значение счетчика при переходе к другой строке*/

SET @@Var1=@@Var1+@@Kolvo *@@Cena /*Суммируем стоимости заказанных книг*/

END

Select @@Var1 /*выводим сумму на экран*/

CLOSE curs2

DEALLOCATE curs2

Вопросы:

1. Что такое курсор?

2. Для чего используется курсор?

3. С помощью какой команды объявляется курсор?

4. С помощью какой команды можно открыть курсор?

  1. Какие типы курсоров существуют?.

  2. Для чего используется функция Fetch?

  3. Для чего используется функция DEALLOCATE?

  4. В чем преимущество прокручиваемого курсора?

  5. Какие операции могут быть выделены в работе с курсором?

  6. Можно ли проводить расчеты с помощью курсоров?
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта