Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 5 / Лабораторная работа 5_НикитинаДС_ПИН-31Д.docx
Скачиваний:
3
Добавлен:
16.07.2021
Размер:
36.75 Кб
Скачать

Лабораторная работа 5. Вариант 2

системы управления базами данных

Никитина Дарья пин-31Д

Тема: Использование языка Transact-sql при работе с иерархическими данными, триггерами и функциями полнотекстового поиска

Цель работы: изучить элементы языка, предназначенные для работы с иерархическими данными, триггерами и функциями полнотекстового поиска, и освоить использование этих эдементов при работе с базой данных.

SQL-запросы

  1. создание и использование хранимой процедуры для иллюстрации присваивания значений переменным;

USE lab_1_1;

GO

CREATE PROCEDURE Proc1

AS

DECLARE @ActionID numeric;

SELECT @ActionID = ActionID

FROM Action

WHERE ActionID > 5;

GO

EXEC dbo.Proc1;

GO

  1. создание и использование хранимой функции compute_discounts для иллюстрации возможностей оператора iF;

USE lab_1_1;

GO

CREATE PROCEDURE COMPUTE_DISCOUNTS

AS

IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')

SELECT 'Weekend';

ELSE

SELECT 'Weekday';

GO

EXEC dbo.COMPUTE_DISCOUNTS;

GO

  1. блок, иллюстрирующий использование оператора цикла WHILE;

USE lab_1_1;

GO

CREATE PROCEDURE Fact

AS

DECLARE @number INT, @factorial INT

SET @factorial = 1;

SET @number = 5;

WHILE @number > 0

BEGIN

SET @factorial = @factorial * @number

SET @number = @number - 1

END;

PRINT @factorial

GO

EXEC dbo.Fact;

GO

  1. использование курсора для снижения цены товара на 3% в таблице PRODUCT;

create table [PRODUCT] (

Name varchar(10) NOT NULL,

Cost numeric NOT NULL)

go

insert into [PRODUCT] (Name, Cost) values ('Молоко', 100)

insert into [PRODUCT] (Name, Cost) values ('Кефир', 200)

insert into [PRODUCT] (Name, Cost) values ('Вода', 300)

insert into [PRODUCT] (Name, Cost) values ('Печенье', 400)

insert into [PRODUCT] (Name, Cost) values ('Чипсы', 500)

insert into [PRODUCT] (Name, Cost) values ('Лимонад', 600)

insert into [PRODUCT] (Name, Cost) values ('Курица', 700)

insert into [PRODUCT] (Name, Cost) values ('Макароны', 800)

insert into [PRODUCT] (Name, Cost) values ('Гречка', 900)

select* from [PRODUCT]

select* from [PRODUCT]

CREATE PROCEDURE Min3

AS

DECLARE @Cost numeric

DECLARE my_cur CURSOR FOR

SELECT Cost from dbo.PRODUCT

OPEN my_cur

FETCH NEXT FROM my_cur into @Cost

WHILE @@FETCH_STATUS = 0

BEGIN

update dbo.PRODUCT set Cost = Cost * 0.97 where Cost = @Cost

FETCH NEXT FROM my_cur into @Cost

END

CLOSE my_cur

DEALLOCATE my_cur

GO

EXEC dbo.Min3;

GO

select* from PRODUCT

  1. Создание и использование хранимой процедуры do_commissions для иллюстрации использования вложенных циклов и курсоров;

create table [PRODUCT1] (

Name varchar(10) NOT NULL,

Cost1 numeric NOT NULL,

Cost2 numeric NOT NULL,

Cost3 numeric NOT NULL)

go

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Молоко', 1, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Кефир', 2, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Вода', 3, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Печенье', 4, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Чипсы', 5, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Лимонад', 6, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Курица', 7, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Макароны', 8, 0, 0)

insert into [PRODUCT1] (Name, Cost1, Cost2, Cost3) values ('Гречка', 9, 0, 0)

select* from [PRODUCT1]

CREATE PROCEDURE Step

AS

DECLARE @Cost numeric

DECLARE @num numeric

DECLARE @factorial numeric

DECLARE my_cur CURSOR FOR

SELECT Cost1 from dbo.PRODUCT1

OPEN my_cur

FETCH NEXT FROM my_cur into @Cost

WHILE @@FETCH_STATUS = 0

BEGIN

update dbo.PRODUCT1 set Cost2 = Cost1 * Cost1 where Cost1 = @Cost

SET @num = @Cost;

SET @factorial = 1;

WHILE @num > 0

BEGIN

SET @factorial = @factorial * @num

SET @num = @num - 1

END

update dbo.PRODUCT1 set Cost3 = @factorial where Cost1 = @Cost

FETCH NEXT FROM my_cur into @Cost

END

CLOSE my_cur

DEALLOCATE my_cur

GO

EXEC dbo.Step;

GO

select* from PRODUCT1