Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-03-15.doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
12.65 Mб
Скачать

4.3.7. Хранимые процедуры

Основным средством реализации алгоритмов обработки данных яв­ля­ются хранимые процедуры, которые выполняются на сервере. При на­пи­са­нии этих процедур используются команды языка запросов Transact‑SQL.

Хранимая процедура создается/изменяется командой Transact‑SQL:

Create/Alter Proc[edure] <имя процедуры> [;<номер варианта>]

[@<имя параметра> <тип параметра> [Varying]

[=<умалчиваемое значение>] [Output]], ...

[With {Recompile | Encryption | Recompile, Encryption }] [For Replication]

As <команды TransactSQL>

Рассмотрим неочевидные параметры этой команды:

Varying ‑ параметр является курсором и полученные данные после соз­дания в процедуре динамического курсора передаются обратно.

Output ‑ значение параметра можно изменять в процедуре.

Recompile ‑ генерация плана выполнения процедуры при каждом вызове процедуры. Обычно не рекомендуется использовать этот параметр.

Encryption ‑ код процедуры хранится в база данных в шифрованном виде.

For Replication ‑ процедура применяется только при выполнении реплика­ции хранимых процедур.

Заготовку команды можно получить средствами Enterprise Manager.

Рассмотрим основные операторы, связанные с процедурами.

return [{<возвращаемое целое число> | 0}] ‑ возвращение из процедуры.

Exec[ute] [@<имя переменной>=]<имя процедуры> [@<имя пара­мет­ра>=<зна­­че­ние> [, ...]] ‑ вы­­полнение хранимой процедуры (с присвоением воз­вра­щае­мо­го процедурой значения переменной @<имя переменной>).

Drop Procedure <имя процедуры> [, <номер варианта>] ‑ удаление хра­ни­мой процедуры (если вариант не указан, то удаляются все варианты).

Пример создания хранимой процедуры вывода фамилий мало­опла­чи­­ваемых сотрудников по задаваемым в виде параметров значений гра­ни­цы зарплаты и кода специальности.

Из груп­пы Sto­red Procedures наж­мем кнопку New. Наберем текст процедуры (рисунок 4.3.7.1).

В процедуре Малоооплачиваемые специалисты используются два параметра @oklad типа small­money и @ks типа int. Перед именем пара­мет­ра указывается знак “@”, а после имени - тип параметра.

Кнопкой Check Syntax проверим синтаксис команды и сохраним про­це­дуру. Для выполнения этой процедуры вызовем из группы Microsoft SQL Server утилиту Query Analyzer, которая позволяет создавать, прове­рять, выполнять и сохранять (в виде текстового файла) команды языка зап­ро­сов Transact‑SQL. Подключимся к серверу Pleshev, вы­бе­рем базу Кадры и вве­дем команду запуска процедуры (рисунок 4.3.7.2).

Рисунок 4.3.7.1. Окно редактора хранимых процедур

Рисунок 4.3.7.2. Окно утилиты Query Analyzer

4.3.8. Создание триггеров

В процессе использования триггеров создаются временные таблицы Inserted (содержит вновь включенные или измененные записи) и Deleted (удаленные или исходные записи до их корректировки). Редактор триг­ге­ров (окно свойств триггера) вызывается командой All Tasks/Manager Triggers из контекстного меню таблицы.

Пример. Создадим триггер для таблицы Сотрудники на включение новой записи, который проверяет наличие введенного значения кода под­раз­деления в таблице Подразделения (рисунок 4.3.8.1).

Рисунок 4.3.8.1. Окно свойств триггера контроля ввода новых строк

Для проверки работы этого триггера отключим контроль целостности Enable/Enforce relatioship for INSERT and UPDATE (рисунок 4.3.2.5) для этой таблицы (иначе СУБД сама будет осу­ществлять подоб­ный контроль, и триггер выполняться не будет). Сох­ра­ним триггер и откроем таблицу Сот­рудники. Введем новую строку с кодом предприятия, равным 5, кото­рый отсутствует в таблице Подраз­де­ле­ния. При попытке перейти на дру­гую строку выполнится триггер, который выведет сообщение об ошибке.

Пример. Создадим триггер (рисунок 4.3.8.2) для таблицы Сотрудники на коррек­ти­ров­ку записи. Если дата рождения сотрудника позже даты его поступления на работу, то выво­дит­ся сообщение об ошибке.

Рисунок 4.3.8.2. Окно свойств триггера контроля откорректированных строк