- •Тема: Использование языка Transact-sql при работе с иерархическими данными, триггерами и функциями полнотекстового поиска
- •Создание и использование хранимой процедуры do_commissions для иллюстрации использования вложенных циклов и курсоров;
- •Объявление и использование записей, динамических типов и курсоров для расчета эффективности работы продавца;
- •Измерение времени выполнения программы;
- •Создание триггера, записывающего номера заказов в таблицу покупок purchase учебной базы данных
Лабораторная работа 5. Вариант 2
системы управления базами данных
Никитина Дарья пин-31Д
Тема: Использование языка Transact-sql при работе с иерархическими данными, триггерами и функциями полнотекстового поиска
Цель работы: изучить элементы языка, предназначенные для работы с иерархическими данными, триггерами и функциями полнотекстового поиска, и освоить использование этих эдементов при работе с базой данных.
SQL-запросы
создание и использование хранимой процедуры для иллюстрации присваивания значений переменным;
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
создание и использование хранимой функции 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
блок, иллюстрирующий использование оператора цикла 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
использование курсора для снижения цены товара на 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
Создание и использование хранимой процедуры 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