Хранимая процедура ещё один объект базы данных, которая представляет собой набор откомпилированных операторов SQL. Хранимая процедура не содержит информации из базы данных, но содержит ссылки на базовые таблицы, где хранятся нужные данные. Хранимые процедуры позволяют выделять какие-либо правила в отдельную структуру, которые затем могут использоваться многими приложениями.
В хранимые процедуры вводятся аргументы, возвращаются результирующие наборы данных. Если хранимая процедура не является триггером, то она вызывается приложением явно.
При создании процедур необходимо придерживаться следующих правил: во время выполнения хранимой процедуры все объекты, на которые она ссылается, должны присутствовать в базе данных. В хранимых процедурах нельзя применять операторы создания объектов: CREATE PROCEDURE, CREATE TRIGGER, CREATE VIEW.
CREATE PROC[EDURE ] имя_процедуры [; число ]
[ VARYING ] [ = значение_по_умолчанию ] [ OUTPUT ] ] [,...n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ]
AS оператор_SQL [ ...n ]
OUTPUT – означает, что соответствующий параметр может быть использован для возвращения данных из хранимой процедуры.
VARYING – определяет, что выходным параметром будет результирующее множество (используется совместно с параметром OUTPUT).
RECOMPILE – предписывает выполнять перекомпиляцию кода процедуры при ее запуске.
ENCRUPTION – предписывает серверу выполнить кодирование процедуры, сделав ее содержимое недоступным для пользователя. Автору процедуры при этом надо позаботиться о наличии у него исходного текста процедуры.
AS – индикатор начала собственно кода процедуры.
Вызов процедуры (исключение составляют триггеры) осуществляется по команде EXEC.
EXEC <Имя процедуры> [<список параметров>]
- Создадим хранимую процедуру для таблицы "Марка автотранспорта"
CREATE PROC PMarkaINSERTFirst
@IDTypeMarka INT,
@NameMarka VARCHAR (15),
@Capacity FLOAT
AS
INSERT INTO Marka(IDTypeMarka,NameMarka,Capacity)VALUES( @IDTypeMarka, @NameMarka,@Capacity);
Теперь заполнение таблицы "Марка автотранспорта" через хранимые процедуры будет иметь следующий вид:
EXEC PMarkaINSERTFirst 1,'ГАЗ-31029',0.00
EXEC PMarkaINSERTFirst 22,'КАВЗ,ПАЗ',0.00
EXEC PMarkaINSERTFirst 22,'КАВЗуд ЛАЗ',0.00
EXEC PMarkaINSERTFirst 22,'КАВЗуд ЛАЗ',0.00
EXEC PMarkaINSERTFirst 22,'КАВЗ,ПАЗ',0.00
Создание хранимые процедуры для запросов Select
Создание хранимой процедуры для таблицы "Марка автотранспорта"
- Выбор всех автобаз
CREATE PROC PAutoBaseSelect
AS
Select * from AutoBase
Теперь выборка всех автобаз будет иметь следующий вид
Exec PAutoBaseSelect;
Выбор Гаражного номера, Госномера из таблицы "Автотранспорт", Имя марки из таблицы "Марка автотранспорта", Тип марки из таблицы "Тип марки автотранспорта"
CREATE PROC PTransportSelect1
@IDAutoBase INT
AS
Select T.GarageNumber[Гар.№], T.GosNumber[Гос.номер], M.NameMarka[Имя марки], TM.NameTypeMarka[Тип марки] from Transport T INNER JOIN Marka M ON T.IDmarka=M.IDmarka
INNER JOIN TypeMarka TM ON M.IDTypeMarka=TM.IDTypeMarka where (T.IDAutobase=@IDAutoBase);
Теперь выбор Гаражного номера, Госномера из таблицы "Автотранспорт", Имя марки из таблицы "Марка автотранспорта", Тип марки из таблицы "Тип марки автотранспорта" будет иметь следующий вид
Exec PTransportSelect1 1;
Выбор Даты постановки в ремонт, Дата снятия с ремонта, Вид работ
CREATE PROC PConditionUnit1
@IDTransport INT
AS
Select LTrim(Str(Day(Beginning)))+'.'+LTrim(Str(Month(Beginning)))+'.'+LTrim(Str(Year(Beginning)))[Дата пост.],
LTrim(Str(Day(Theend)))+'.'+LTrim(Str(Month(Theend)))+'.'+LTrim(Str(Year(Theend)))[Дата вых.], Working[Вид работ]
from ConditionUnit where (IDTransport=@IDTransport);
Теперь Выбор Даты постановки в ремонт, Дата снятия с ремонта, Вид работ примет следующий вид
Exec PConditionUnit1 1;
Триггеры
Триггер – это специальный тип хранимой процедуры, которая автоматически выполняется при возникновении некоторого события (попытке выполнить операции удаления, добавления, редактирования). Как и любой объект базы данных, триггер создается с помощью команды CREATE
CREATE TRIGGER <имя триггера>
ON <имя представления или таблицы>
[WITH ENCRYPTION]
{{{FOR|AFTER}<[DELETE][,][INSERT] [,][UPDATE]>}|INSTEAD OF}
[WITH APPEND]
[NOT FOR REPLICATION]
AS
<SQL –ОПЕРАТОР
….
….
….>,
где
ON - имя объекта, для которого триггер используется.
WITH ENCRYPTION – кодирует текст представления.
WITH APPEND – используется для совместимости с версией 6.5
NOT FOR REPLICATION – меняет правила запуска триггера. Такой триггер не будет стартовать при выполнении над таблицей операций, связанных с репликацией данных.
При срабатывании триггера создаются таблицы INSERTED, DELETED. INSERTED – для хранения добавленных записей, DELETED – для хранения удаленных записей. Таблицы видимы только для триггера и существуют только при выполнении триггера.
Создание триггера для таблицы "Состояние единицы".Проверка на ввод пустой даты окончания ТО или ремонта и замена ее на 9999.01.01
CREATE TRIGGER ConditionUnitTerm
ON ConditionUnit
FOR INSERT,UPDATE
AS
IF EXISTS
( SELECT 'TRUE' FROM ConditionUnit WHERE Theend='1900.01.01')
BEGIN
UPDATE ConditionUnit SET Theend='9999.01.01' WHERE Theend='1900.01.01'
END
Заключение
В результате курсового проекта была реализована база данных для процесса «Учет ремонта и ТО автотранспорта». Были созданы таблицы, в которых были определены ограничения на уровне столбцов и на уровне самой таблицы, и занесены необходимые данные. Изучение предметной области позволило выделить и реализовать основные запросы и представления к базе данных.
Для реализации целостности базы данных был созданы триггер, изменяющий введенную дату окончания ремонта или ТО.
Реализованная база данных позволит в дальнейшем хранить необходимую информацию, добавлять данные и редактировать их. Эта база данных может быть использована в дальнейшем для разработки информационной системы Учет ремонта и ТО автотранспорта», с целью эффективной организации работы отдела ПТО УАТХ.
Список литературы
1. Томас Конноли, Каролин Бегг. Базы данных. Проектирование, реализация и сопровождение. Теория и практика: Пер. с англ. М.:Вильямс> 2001.-1440с.
2. К. Дж. Дейт. Введение в системы баз данных.: Пер. с англ. М.:Вильямс? 2001.-1072с.
3. Г.Н. Калянов. Консалтинг в автоматизации бизнес процессов. М.: Горячая линия - Телеком, 2002. - с.320.:ил.
Приложение
Приложение