- •Содержание
- •Техническое задание
- •Анализ предметной области
- •1.2 Постановка задачи
- •2. Технический проект информационной системы
- •2.1 Функциональная модель
- •2.1.1 Контекстная диаграмма и диаграммы детализации процессов
- •2.1.2 Диаграмма дерева узлов
- •2.2 Информационная модель
- •2.2.1 Идентификация сущностей и связей. Er-диаграмма логического уровня.
- •2.2.2 Er-диаграмма физического уровня. Ограничения доменов. Ограничения ссылочной целостности. Переопределение триггеров. Индексирование отношений.
- •2.2.3 Определение представлений, хранимых процедур серверной компоненты. Er-диаграмма в режиме отображения представлений
- •2.3 Верификация спроектированной логической модели.
- •3. Реализация системы
- •3.1. T-sql-определения регламентированных запросов
- •3.2 T-sql-определения триггеров
- •3.3 T-sql-определения хранимых процедур
- •3.4 T-sql-определения курсоров
- •3.5 Распределение прав доступа пользователей
- •Заключение
- •Список использованных литературных источников
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
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
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 /*освобождаем курсор*/
show_zayavki – курсор выводит список заявок после определенной даты. Аналогичен третьему курсору с отличием, что он еще считает количество заявок.
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