Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР №8

.docx
Скачиваний:
3
Добавлен:
28.06.2022
Размер:
96.11 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Национальный исследовательский университет «МИЭТ»

Факультет «Микроприборы и системы управления» (МПСУ)

Кафедра «Вычислительная техника» (ВТ)

Лабораторная работа №8 по дисциплине

«Базы данных»

Тема: «Представления, хранимые процедуры, функции в SQL Server»

Цель работы: получить навыки работы с представлениями, хранимыми процедурами и функциями в MS SQL Server.

Продолжительность работы: 4 часа.

Выполнила студентка группы «ИВТ-44»: Никитина София Геннадьевна

Преподаватель: Немченко Дмитрий Игоревич

2021 г.

Содержание

  1. Выполнение работы 3

    1. Представления 3

    2. Пользовательские функции 3

    3. Процедуры 5

  1. Вывод 13

  1. Выполнение работы

Задание 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. Хранимая процедура поиска по виду родственника.

  1. Вывод

Получили навыки работы с представлениями, хранимыми процедурами и функциями в MS SQL Server.

Соседние файлы в предмете Базы данных