- •Кафедра экономической информатики
- •Базы данных
- •Содержание
- •Введение
- •Лабораторная работа №1. Логические и физические модели данных
- •Методические указания
- •Задание к работе
- •Раздел I. Создание сущностей в eRwin
- •Раздел II. Создание связей между сущностями, подмножеств модели и хранимых отображений. Переход к физической модели данных
- •Раздел III. Выполнение операции прямого проектирования
- •Раздел IV. Выполнение операции обратного проектирования
- •Лабораторная работа №2. Усложненные диаграммы «сущность-связь»
- •Методические указания
- •Задание к работе
- •Раздел I. Создание сущностей логической модели
- •Раздел II. Создание связей между сущностями и иерархии наследования
- •Раздел III. Выполнение вариантов трансформы категориальной связи
- •Раздел IV. Выполнение методов синхронизации системного каталога базы данных и текущей модели
- •Лабораторная работа №3. Работа в среде субд «ms sql Server 2005»
- •Методические указания
- •Задание к работе
- •Раздел I. Создание базы данных и ее объектов
- •Раздел II. Управление пользователями и правами доступа к данным
- •Лабораторная работа №4. Создание базы данных и ее объектов с помощью команд языка Transact-sql
- •Методические указания и задания к выполнению
- •Раздел I. Создание базы данных и ее объектов
- •Раздел II. Ввод данных в таблицы базы данных
- •Insert into Заказ (КодКлиента, КодТовара, Количество)
- •Inner join Поставщик
- •Inner join Товар
- •Раздел III. Управление пользователями и правами доступа к данным.
- •Раздел IV. Анализ полученных результатов
- •Лабораторная работа №5. Манипулирование данными с помощью команд языка Transact-sql
- •Методические указания
- •Раздел I. Выборка данных из таблиц и представлений.
- •Раздел II. Обновление данных в таблицах и представлениях.
- •Раздел III. Удаление данных из таблиц и представлений.
- •Раздел IV. Изменение структуры таблицы.
- •Раздел V. Удаление таблицы из базы данных.
- •Задание к работе
- •Лабораторная работа №6. Программирование на языке Transact-sql
- •Методические указания
- •Раздел I. Основы программирования на языке Transact-sql.
- •Раздел II. Создание и работа с хранимыми (на сервере) процедурами.
- •If @Страна is not null
- •If @Город is not null
- •If @Город is not null
- •Insert into Валюта
- •Values(@Код, @Имя, @Шаг, @Курс)
- •If @Страна is not null
- •If @Город is not null
- •Into ##Регион
- •Раздел III. Создание и работа с определяемыми пользователем функциями.
- •Insert @rowset (КодРегиона, Страна, Область, Город)
- •Задание к работе
- •Лабораторная работа №7. Курсоры и триггеры в языке Transact-sql
- •Методические указания
- •Раздел I. Использование курсоров в языке Transact-sql
- •If @НачалоИнтервала is null
- •If @КонецИнтервала is null
- •Раздел II. Создание триггеров в языке Transact-sql.
- •If update(ДатаЗаказа)
- •If update(Цена)
- •If update(Цена)
- •Inserted.Цена * Валюта.КурсВалюты
- •Задание к работе
- •Литература Основная
- •Базы данных
- •220013, Минск, п. Бровки, 6.
Раздел III. Создание и работа с определяемыми пользователем функциями.
Помимо использования встроенных функций, пользователи могут создавать свои собственные функции. Эти функции в отличие от встроенных являются обычными объектами базы данных, т.е. имеют своего владельца, который может предоставлять другим пользователям право на их вызов. Имеется три типа определяемых пользователем функций.
1).Функции типа Scalar. Функции этого типа являются наиболее привычными и возвращают скалярное значение любого из типов данных, поддерживаемых сервером, за исключением text, ntext, image, timestamp, table и cursor. Команда создания функции имеет следующий синтаксис (см. [1], стр. 1115):
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option> [ [,] ...n] ]
[ AS ]
BEGIN function_body RETURN scalar_expression END
/* Функция типа Scalar, возвращающая курс валюты по ее коду */
CREATE FUNCTION fn_ВыборКурсаВалюты
(@Код CHAR(3))
RETURNS SMALLMONEY
BEGIN
DECLARE @Курс SMALLMONEY --объявляем локальную переменную @Курс
SELECT @Курс = КурсВалюты
FROM Валюта
WHERE КодВалюты = @Код
RETURN @Курс --функция возвращает значение переменной @Курс
END
GO
/* Проверка работы функции func_ВыборКурсаВалюты */
DECLARE @Code CHAR(3)
SET @Code = 'USD'
SELECT @Code AS [Код валюты], dbo.fn_ВыборКурсаВалюты(@Code)
AS [Курс валюты]
GO
Примечание. При вызове скалярной функции, ее имя должно быть дополнено именем владельца или именем пользователя, которому предоставлено право на вызов этой функции.
2). Функции типа Inline Table-valued. Эти функции всегда возвращают значения типа данных table (таблица). Тело функции всегда состоит из одной команды SELECT. Особенностью функций этого типа является то, что код функции при выполнении программы вставляется непосредственно в исполняемый набор команд, т.е. происходит не вызов функции, а встраивание. Команда создания функции имеет следующий синтаксис (см. [1], стр. 1117):
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS TABLE
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
RETURN [ ( ] select-stmt [ ) ]
/* Функция типа Inline Table-valued, возвращающая заказы по валюте*/
CREATE FUNCTION fn_ВыборЗаказовПоВалюте
(@Код CHAR(3))
RETURNS TABLE
AS RETURN
SELECT Заказ.*, Товар.КодВалюты
FROM Заказ INNER JOIN Товар
ON Заказ.КодТовара = Товар.КодТовара
WHERE Товар.КодВалюты = @Код
GO
/* Проверка работы функции func_ВыборЗаказовПоВалюте */
SELECT * FROM fn_ВыборЗаказовПоВалюте('USD')
GO
3). Функции типа Multi-statement Table-valued. Эти функции, как и функции предыдущего типа, возвращают значение типа table, однако тело функции этого типа может состоять более чем из одной команды, что дает возможность использовать в теле функции транзакции, курсоры, вызывать хранимые процедуры и т.д. Команда создания функции имеет следующий синтаксис (см. [1], стр. 1118):
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
BEGIN function_body RETURN END
< function_option > ::= { ENCRYPTION | SCHEMABINDING }
< table_type_definition > :: = ( { column_definition | table_constraint } [ ,...n ]
/* Функция типа Multi-statement Table-valued, возвращающая таблицу с новым столбцом */
CREATE FUNCTION fn_ВыборРегионовСтраны
(@Страна VARCHAR(20))
RETURNS @CountryRegions TABLE (
КодРегиона INT PRIMARY KEY,
Страна VARCHAR(20) NOT NULL,
Город VARCHAR(20) NULL,
ОбластнойЦентр BIT NULL)
BEGIN
-- Объявляем локальную переменную @rowset типа таблица
DECLARE @rowset TABLE (
КодРегиона INT PRIMARY KEY,
Страна VARCHAR(20) NOT NULL,
Область VARCHAR(20) NULL,
Город VARCHAR(20) NULL,
ОбластнойЦентр BIT DEFAULT 0 NULL)
-- Заносим данные в локальную переменную @rowset