Хранимая процедура – это программа, написанная на языке СУБД, скомпилированная на машинный язык и сохраненная для многократного и более эффективного выполнения. Хранимые процедуры могут реализовать логику, плохо укладывающуюся в рамки языка запросов. Наряду с возможностью передачи в хранимую процедуру переменных, существует возможность извлечения значений из хранимой процедуры.
Разработчику необходимо иметь разрешение на создание хранимой процедуры, а пользователям нужны соответствующие разрешения, чтобы выполнить эту хранимую процедуру.
Создайте хранимую процедуру, которая будет выводить номера и имена поставщиков, имеющих определенный статус.
Войдите на сервер с учетной записью администратора. В окне создания запросов введите код:
USE Postavki;
GO
CREATE PROCEDURE PostDet.SUP_STAT @Rstatus INT
AS
BEGIN
SELECT * FROM PostDet.tblS WHERE STATUS > @Rstatus
END
Выполнитеи сохраните процедуру.
Когда приложение вызывает хранимую процедуру, SQL Serverпроверяет, имеет ли текущий пользователь базы данных разрешение EXECUTEдля этойхранимой процедуры. В следующем примере разрешение EXECUTEпредоставляется пользователю Fred.
USE Postavki;
GO
GRANT EXECUTE ON PostDet.SUP_STAT
TO[FS-64C67299CCAR\Fred];
Хранимую процедуру можно выполнить без указания перед ее именем инструкции EXECUTE. В этом случае вызов хранимой процедуры должен быть первой командой в пакете команд.
Переключитесь на учетную запись Fred .
Протестируйте созданную хранимую процедуру. Для этого в окне создания запросавведите следующий текст: PostDet. SUP_STAT 10;
НажмитеВыполнитьи оцените результат.
Другой вариант вызова этой процедуры:
USE Postavki;
GO
DECLARE @Zstatus INT
SET @Zstatus = 20
EXEC PostDet. SUP_STAT @Zstatus;
Для удаления хранимой процедуры используется команда DROP PROCEDURE.
DROP PROCEDURE name.
Для отмены предоставленного ранее разрешения на выполнение хранимой процедуры служит оператор REVOKE. Чтобы запретить выполнение хранимой процедуры пользователю используют оператор DENY.
Самостоятельно отмените разрешение Fred на выполнение процедурыSUP_STAT.