Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка по курсовому проекту ББД.doc
Скачиваний:
50
Добавлен:
29.02.2016
Размер:
861.7 Кб
Скачать

3.4 T-sql-определения курсоров

1. shows - Курсор для изменения фамилии начальника отдела

DECLARE

@number int, @name varchar(40), @fam varchar(40) /*Объявляем переменные*/

DECLARE shows CURSOR

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

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

FOR

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

[Номер отдела], [Название отдела], [Фамилия начальника отдела]

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

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

OPEN shows /*открываем глобальный курсор*/

FETCH NEXT FROM shows /*Просматриваем строки и значения*/

INTO @number, @name, @fam

WHILE @@FETCH_STATUS=0 /*пока не дойдем до конца*/

BEGIN

IF @fam=@family /*проверяем введенное значение со значение в таблице*/

UPDATE dbo.Отделы /* обновляем таблицу*/

SET [Фамилия начальника отдела]=@family_new /* устанавливаем новое значение*/

WHERE CURRENT OF shows

PRINT 'Фамилия успешно изменена'

FETCH NEXT FROM shows /*переходим к следующей строке*/

INTO @number, @name, @fam

END

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

DEALLOCATE shows /*освобождаем курсор*/

END

  1. curs1 - Курсор считает количество сотрудников в отделе

DECLARE curs1 CURSOR

DECLARE @msg varchar(100) /*Объявляем переменные*/

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

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

FOR

SELECT * FROM dbo.Сотрудники

WHERE dbo.Сотрудники.[Номер отдела]=@otdel

FOR READ ONLY /*только для чтения*/

OPEN GLOBAL curs1 /*открываем глобальный курсор*/

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

SET @Counter = @@CURSOR_ROWS /*присваиваем количество строк*/

Select @Counter AS 'Количество сотрудников в отделе' /*показываем количество сотрудников*/

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

DEALLOCATE curs1 /*освобождаем курсор*/

END

  1. service_cursor - Курсор выводит список услуг

BEGIN

/*объявляем переменные*/

DECLARE @number VARCHAR(100)

DECLARE @name VARCHAR(100)

DECLARE @price VARCHAR(100)

DECLARE @mesage VARCHAR(100)

PRINT 'Список услуг'

DECLARE service_cursor CURSOR /*Создается глобальный прокручиваемый курсор*/

SELECT [Номер услуги], [Название услуги], [Стоимость услуги]

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

FROM dbo.Услуги

/*Из какой таблицы*/

OPEN service_cursor /*открываем курсор*/

FETCH NEXT FROM service_cursor INTO @number, @name, @price

WHILE @@FETCH_STATUS=0 /* выполняем цикл пока не дойдем до конца списка */

BEGIN

SELECT @mesage = '№ '+@number+' Название услуги: '+

@name + ' Цена услуги: ' + @price /*показываем текущую услугу*/

PRINT @mesage

FETCH NEXT FROM service_cursor

INTO @number, @name, @price

END

END

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

DEALLOCATE service_cursor /*освобождаем курсор*/

  1. show_zayavki – курсор выводит список заявок после определенной даты. Аналогичен третьему курсору с отличием, что он еще считает количество заявок.

  2. Srednyaa_plosh_odnoi_kv – курсор считает среднюю площадь одной квартиры.

BEGIN

DECLARE cursors CURSOR

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

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

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

[Жилая площадь], [Колличество квартир]

FROM dbo.[Дома на обслуживании] /* из какой таблицы*/

FOR UPDATE

OPEN GLOBAL cursors /*открываем глобальный курсор*/

DECLARE @plosh int, @col int, @count int, @plosh2 int,

@col2 int /*объявляем переменные*/

SET @count = 0 SET @col2=0 SET @plosh2=0 SET @col=0

SET @plosh=0 /*устанавливаем значения*/

WHILE @count< @@CURSOR_ROWS /*выполняем цикл пока не достигнем конца*/

BEGIN

FETCH cursors INTO @plosh, @col

SET @count =@count +1

SET @plosh2=@plosh2+@plosh

SET @col2=@col2+@col

END

Select @plosh2/@col2 AS 'Средняя площадь одной квартиры'

Select @plosh2 AS 'Общая площадь'

Select @col2 AS 'Сумма квартир'

Select @count AS 'Количество записей'

/*выводим значения*/

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

DEALLOCATE cursors /*освобождаем курсор*/END