Что такое хранимая процедура?

281
задан 6 revs, 4 users 50% 18 January 2017 в 08:05
поделиться

2 ответа

Хранимые процедуры являются пакетом 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, имеет тонну заслуги.

231
ответ дан Brad Turek 23 November 2019 в 01:59
поделиться

Обычно хранимой процедурой является "Функция 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.

36
ответ дан Andrey Morozov 23 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: