Хранимые процедуры являются пакетом SQL-операторов, которые могут быть выполнены несколькими способами. Большая часть главной DBMS поддерживает хранимые процедуры; однако, не все делают. Необходимо будет проверить с конкретной документацией справки DBMS для специфических особенностей. Поскольку я являюсь самым знакомым с SQL Server, я буду использовать это в качестве своих образцов.
Для создания хранимой процедуры синтаксис довольно прост:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Так, например:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
преимущество А хранимых процедур - то, что можно централизовать логику доступа к данным в единственное место, которое тогда легко для DBA оптимизировать. Хранимые процедуры также обладают преимуществом безопасности, в котором можно предоставить, выполняют права на хранимую процедуру, но у пользователя не должно будет быть полномочий чтения-записи на базовых таблицах. Это - хороший первый шаг против Внедрения SQL.
Хранимые процедуры действительно идут с оборотными сторонами, в основном обслуживание, связанное с Вашим основным операция CRUD . Скажем, для каждой таблицы Вы имеете Вставку, Обновление, Удаляете и по крайней мере один выбор на основе первичного ключа, который означает, что каждая таблица будет иметь 4 процедуры. Теперь возьмите достойную базу данных размера 400 таблиц, и у Вас есть процедуры 1600 года! И это предполагает, что у Вас нет дубликатов, которые Вы, вероятно, будете.
Это - то, где с помощью ORM или некоторый другой метод к автоматическому генерируют основные операции CRUD, имеет тонну заслуги.
Обычно хранимой процедурой является "Функция SQL". Они имеют:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
Это - сфокусированный пример T-SQL. Хранимые процедуры могут выполнить большинство SQL-операторов, возвратить скаляр и основанные на таблице значения, и считаются более безопасными, потому что они предотвращают атаки с использованием кода на SQL.