- •Серверы баз данных Курс лекций
- •Предисловие
- •Серверы баз данных. Основные понятия
- •История развития субд
- •Перспективы развития субд
- •Трехуровневая архитектура бд. Ее назначение
- •Модели клиент- сервер в технологии бд
- •Пользователи бд
- •Разработчики и администраторы приложений.
- •Контрольные вопросы
- •Двухуровневые модели
- •Модель удаленного доступа к данным
- •Удаленная презентация (Модель сервера бд)
- •Модель распределенной бд
- •Модель сервера приложений
- •Проектирование баз данных
- •Этапы разработки базы данных
- •Критерии оценки качества логической модели данных
- •Алгоритм нормализации (приведение к 3нф)
- •Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Пример разработки er-модели
- •Описание предметной области
- •Описание сущностей и типов связей
- •П ереход к реляционной модели
- •Концептуальные и физические er-модели
- •Контрольные вопросы
- •Языки бд. Язык определения данных
- •Создание бд. Способы создания бд
- •Создание таблиц базы данных
- •Декларативные ограничения при создании таблиц
- •Задание ограничений ссылочной целостности
- •Изменение таблиц
- •Создание индексов в системе sql-сервер
- •Кластеризованный индекс
- •Контрольные вопросы
- •Языки бд. Язык управления данными
- •Выборка данных
- •Сортировка результатов запроса
- •Вложение запросов
- •Создание таблицы из набора результатов
- •Использование оператора union
- •Запросы на модификацию данных
- •Запросы на удаление
- •Запросы на добавление
- •Вставка записей из другой таблицы
- •Добавление данных в указанные поля
- •Values(‘31.03.03’,’согласен’,3000,4)
- •Запросы на обновление
- •Контрольные вопросы
- •Создание представлений
- •Создание, удаление и обновление представлений
- •Модифицируемые и немодифицируемые представления
- •Контрольные вопросы
- •Хранимые процедуры
- •Элементы Transact sql
- •Оператор условия
- •Циклическое выполнение операций
- •Функции
- •Создание хранимых процедур
- •Выполнение хранимой процедуры.
- •Контрольные вопросы
- •Триггеры
- •Назначение триггеров
- •Создание триггеров
- •Принцип работы триггеров
- •Включение и отключение триггера. Удаление триггера, Просмотр информации о триггерах
- •Контрольные вопросы
- •Транзакции и блокировки
- •Понятие транзакции
- •Свойства транзакций. Способы завершения транзакций
- •Операторы Transact sql для работы с транзакциями
- •Журнал транзакций.
- •Блокировки.
- •Сериалиация транзакций
- •Переопределение блокировок на уровне запроса. Типы блокировок
- •Контрольные вопросы
- •Безопасность данных и привилегии
- •Принципы защиты баз данных от несанкционированного доступа
- •Защита данных в системе ms sql Server
- •Контрольные вопросы
- •Организация доступа к бд из прикладных программ
- •Понятие курсора
- •Интерфейс прикладного программирования
- •Архитектура odbc
- •Архитектура odbc
- •Контрольные вопросы
- •Файловые структуры, используемые для хранения информации в бд.
- •Файлы прямого и последовательного доступа
- •Индексные файлы
- •Файлы с плотным индексом
- •Файлы с неплотным индексом
- •Моделирование отношений 1:м на файловых структурах
- •Моделирование отношений 1:м с использованием однонаправленных указателей
- •Структура записи подчиненного файла.
- •Алгоритм удаление записи из цепочки подчиненного файла.
- •Инвертированные списки
- •К Рисунок 14 онтрольные вопросы
- •Содержание
- •Литература
Выполнение хранимой процедуры.
Выполнение процедуры осуществляется с помощью команды
EXEC[UTE] имя процедуры [@параметр = значение]
Значение параметра задается путем передачи значения или ссылки на позицию.
Передача параметра со ссылками на имена осуществляется следующим образом: @параметр = значение. При этом значения параметров можно указывать в любом порядке, а параметры, имеющие значение по умолчанию, опускать.
Передача значений без ссылок на имена параметров называется передачей значений по позиции. Если указываются только значения, их следует перечислять в порядке определения в операторе CREATE PROC. При этом можно опускать параметры, имеющие значения по умолчанию, но последовательность параметров нарушать нельзя.
Возврат значений при помощи параметров вывода.
Для использования параметра вывода ключевое слово OUTPUT должно указываться как в операторе CREATE PROC, так и в операторе EXEC. Вызывающий оператор должен указать для параметра вывода имя переменной.
Пример: создается хранимая процедура для вычисления суммы 2 чисел.
USE <имя БД>
GO
CREATE PROCEDURE SUMMA
@A smallint,
@B smallint,
@S smallint OUTPUT
AS
SET @S= @A+@B
Вызов:
DECLARE @result smallint
EXEC SUMMA 5,7,@result OUTPUT
SELECT ‘результат=’, @result
После выполнения оператора EXEC переменная @result будет хранить значение параметра вывода. Вывод значения осуществляется оператором SELECT.
Процедуры могут быть процедурами или функциями. Эти понятия трактуются традиционно. Процедура в явном виде не возвращает значение, но в ней может быть использовано ключевое слово, которое определяет, что данный параметр является выходным.
Примеры:
1.Создадим процедуру NEW_COURSE для увеличения значения атрибута COURSE при переводе студентов на следующий курс.
CREATE PROCEDURE NEW_COURSE
AS UPDATE STUDENT
SET COURS=COURSE + 1
Вызов процедуры:
EXEC NEW_COURSE
2. Создадим процедуру для начисления стипендии студентам в зависимости от полученного среднего балла. В процедуру передается значение среднего балла, в зависимости от которого система устанавливает ставку стипендии.
CREATE PROCEDURE STIP
@N TINYINT --средний балл
AS
BEGIN
DECLARE @X REAL
SELECT @X=
CASE @N
WHEN 3 THEN 20
WHEN 4 THEN 30
WHEN 5 THEN 40
ELSE 0
END
PRINT ‘Установлена стипендия:’
PRINT @X
END
Вызов:
EXEC STIP 3
3.Функция, реализующая эту же задачу:
CREATE PROCEDURE STIP
@N TINYINT
AS
BEGIN
DECLARE @X REAL
SELECT @X=
CASE @N
WHEN 3 THEN 20
WHEN 4 THEN 30
WHEN 5 THEN 40
ELSE 0
END
RETURN @X
END
DECLARE @ST REAL
EXEC @St=Stip 3
SELECT "стипендия =", @ST
3. Процедура для повышения стипендии студентам, прослушавшим спецкурс по заданному предмету.
В процедуру будут передаваться следующие параметры: @NOM_ZACH – номер зачетки, @PKOD – код предмета и @IND – процент индексации стипендии.
CREATE PROC IND_STIP
(@NOM_ZACH int,
@PKOD smallint,
@IND real)
AS
IF EXISTS (SELECT PKOD, NOM_ZACH
FROM USP
WHERE NOM_ZACH = @ NOM_ZACH
AND PKOD= @PKOD)
UPDATE STUDENTS SET STIP=STIP*@IND
Для запуска процедуры:
EXEC IND_STIP @NOM_ZACH = 1298, @PKOD =1212, @IND=1.2
