ЛР №8
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Национальный исследовательский университет «МИЭТ»
Факультет «Микроприборы и системы управления» (МПСУ)
Кафедра «Вычислительная техника» (ВТ)
Лабораторная работа №8 по дисциплине
«Базы данных»
Тема: «Представления, хранимые процедуры, функции в SQL Server»
Цель работы: получить навыки работы с представлениями, хранимыми процедурами и функциями в MS SQL Server.
Продолжительность работы: 4 часа.
Выполнила студентка группы «ИВТ-44»: Никитина София Геннадьевна
Преподаватель: Немченко Дмитрий Игоревич
2021 г.
Содержание
Выполнение работы 3
Представления 3
Пользовательские функции 3
Процедуры 5
Вывод 13
Выполнение работы
Задание 1. Базу данных, созданную в рамках Л.р. №7 дополнить представлениями, пользовательскими функциями и хранимыми процедурами в соответствии с информационными потребностями пользователей.
Задание 2. Проверить работоспособность созданных объектов. Результат занести в отчет.
Представления
Для начала создадим представление. Допустим необходимо узнать всех студентов мужского пола для расселения в общежитии. Используем CREATE OR ALTER для создания нового представления или перезаписи существующего. Запрос можно найти в Базы данных => [Название базы данных] => Представления.
CREATE OR ALTER VIEW МужскойПол AS
SELECT НомерСтуденческого, Фамилия, Имя, Отчество, ДатаРождения, НомерГруппы
FROM Студент
WHERE Пол = 'мужской';
Рисунок 1. Представление студентов мужского пола.
Пользовательские функции
Скалярная функция. Найдем количество льгот по названию в базе данных. Запрос можно найти в Базы данных => [Название базы данных] => Программирование => Функции => Скалярные функции.
CREATE FUNCTION
КолЛьгот(@privilege varchar(50))
RETURNS INT
AS
BEGIN
DECLARE @c INT
SET @c=(SELECT COUNT(*)
FROM Льгота
WHERE ВидЛьготы = @privilege
)
RETURN(@c)
END
Чтобы запустить скалярную функцию, введем входной параметр, допустим, Инвалидность.
SELECT dbo.КолЛьгот ('Инвалидность') as [Количество льгот по названию]
Рисунок 2. Скалярная функция количества льгот по инвалидности.
Встраиваемая функция. Выведем названия факультетов существующих в базе данных групп и сгруппируем ответ. Запрос можно найти в Базы данных => [Название базы данных] => Программирование => Функции => Функции, возвращающие табличное значение.
CREATE FUNCTION ФакультетыГрупп()
RETURNS TABLE
AS
RETURN (SELECT Группа.НомерГруппы, Факультет.НазваниеФакультета
FROM Факультет INNER JOIN Группа
ON Факультет.ИДФакультета = Группа.ИДФакультета
GROUP BY Группа.НомерГруппы, Факультет.НазваниеФакультета
)
Запустим функцию:
SELECT * FROM dbo.ФакультетыГрупп ()
Рисунок 3. Встраиваемая функция названия факультетов групп.
Многокомандная функция. В колонке результата указать. совершеннолетний ли студент. В таблице указать номер студенческого, ФИО, день рождения, вид родственника.
CREATE FUNCTION Несовершеннолетние(@data date)
RETURNS @ResultTable TABLE (
ИД smallint, Фамилия VARCHAR(50), Имя VARCHAR(50), Отчество VARCHAR(50), ДатаРождения date, Статус VARCHAR(50), Родственник VARCHAR(50)
) AS BEGIN
INSERT INTO @ResultTable
SELECT Студент.НомерСтуденческого, Студент.Фамилия, Студент.Имя, Студент.Отчество, Студент.ДатаРождения, NULL, ВидРодственника.НазваниеВида
FROM Студент
INNER JOIN Родственник
ON Студент.НомерСтуденческого = Родственник.НомерСтуденческого
INNER JOIN ВидРодственника
ON Родственник.ИДРодственника = ВидРодственника.ИДВида
UPDATE @ResultTable
SET Статус =
CASE WHEN DATEDIFF(day,ДатаРождения, @data) < 18 THEN 'Несовершеннолетний'
ELSE 'Совершеннолетний'
END
RETURN
END
Запустим функцию:
SELECT * FROM dbo.Несовершеннолетние ('2000-05-06')
Рисунок 4. Встраиваемая функция названия факультетов групп.
Процедуры
Хранимая процедура. Выведем студентов у кого в родственниках записана Мать.
CREATE PROC СтудентыВидРодственника
@k VARCHAR(50)
AS
SELECT
Студент.НомерСтуденческого AS Номер,
Студент.Фамилия,
Студент.Имя,
Студент.Отчество,
ВидРодственника.НазваниеВида AS ВидРодственника
FROM ВидРодственника INNER JOIN (
Студент INNER JOIN Родственник ON Студент.НомерСтуденческого=Родственник.НомерСтуденческого
) ON ВидРодственника.ИДВида=Родственник.ИДРодственника
WHERE ВидРодственника.НазваниеВида=@k
Запустим функцию:
EXEC СтудентыВидРодственника 'Мать'
Рисунок 5. Хранимая процедура поиска по виду родственника.
Вывод
Получили навыки работы с представлениями, хранимыми процедурами и функциями в MS SQL Server.