Что такое хранимая процедура?
Что такое хранимая процедура? Как они работают? Каков состав хранимой процедуры (вещи каждый должны должна быть хранимая процедура)?
15 ответов
хранимые процедуры пакета инструкций SQL, которые могут быть выполнены несколькими способами. Большинство основных СУБД поддерживают хранимые процедуры, однако не все. Вам нужно будет проверить с вашей конкретной справочной документацией СУБД для специфики. Поскольку я лучше всего знаком с 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-инъекций.
хранимые процедуры имеют недостатки, в основном обслуживание, связанное с вашим basic CRUD операции. Скажем для каждой таблицы у вас есть вставка, обновление, удаление и хотя бы один выбор на основе первичного ключа, это означает, что каждая таблица будет иметь 4 процедуры. Теперь возьмем базу данных приличного размера из 400 таблиц, и у вас есть 1600 процедур! И это при условии, что у вас нет дубликатов, которые вы, вероятно, будете.
здесь используется ОРМ или какой-то другой метод для автоматического создания ваших основных операций CRUD имеет массу достоинств.
хранимая процедура-это скомпилированный набор SQL-операторов, которые используются для выполнения специальных задач.
пример: если у меня есть Employee
таблица
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
сначала я извлекаю Employee
стол:
Create Procedure Employee details
As
Begin
Select * from Employee
End
чтобы запустить процедуру на SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
затем во-вторых, я вставляю значение в таблицу Employee
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
для выполнения параметризованной процедуры на SQL Сервер:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
пример: @Name Varchar(30)
на Employee
таблицы Name
размер столбца должен быть varchar(30)
.
хранимая процедура-это группа операторов SQL, которые были созданы и сохранены в базе данных. Хранимая процедура будет принимать входные параметры, чтобы одна процедура могла использоваться по сети несколькими клиентами, использующими разные входные данные. A хранимые процедуры уменьшат сетевой трафик и повысят производительность. Если мы изменим хранимую процедуру, все клиенты получат обновленную хранимую процедуру.
пример создания хранимой процедура
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
преимущества использования хранимых процедур
-
хранимая процедура позволяет модульному программированию.
вы можете создать процедуру один раз, сохранить ее в базе данных и вызвать ее любое количество раз в вашей программе.
-
хранимая процедура позволяет ускорить выполнение.
если операция требует большого количества кода SQL, который выполняется повторно, хранимые процедуры могут быть быстрее. Они анализируются и оптимизируются при первом выполнении, а скомпилированная версия хранимой процедуры остается в кэше памяти для последующего использования. Это означает, что хранимая процедура не нуждается в повторной обработке и повторной оптимизации при каждом использовании, что приводит к гораздо более быстрому времени выполнения.
-
хранимая процедура может уменьшить сетевой трафик.
операция, требующая сотен строк кода Transact-SQL, может быть выполнена с помощью одной инструкции это выполняет код в процедуре, а не путем отправки сотен строк кода по сети.
-
хранимые процедуры обеспечивают лучшую безопасность ваших данных
пользователям может быть предоставлено разрешение на выполнение хранимой процедуры, даже если у них нет разрешения на выполнение инструкций процедуры напрямую.
в SQL Server мы имеем различные типы хранимых процедур:
как правило, хранимая процедура является " функцией 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-инъекций.
подумайте о такой ситуации,
- у вас есть база данных с данными.
- существует ряд различных приложений, необходимых для доступа к этой центральной базе данных, и в будущем некоторые новые приложения тоже.
- Если вы собираетесь вставить встроенные запросы базы данных для доступа к центральной базе данных, внутри кода каждого приложения по отдельности, то, вероятно, вам придется дублировать один и тот же запрос снова и снова внутри разных приложений код.
- В такой ситуации, вы можете использовать хранимые процедуры (СПС). С помощью хранимых процедур вы записываете количество общих запросов (процедур) и сохраняете их в центральной базе данных.
- Теперь дублирование работы никогда не случится как раньше и доступ к данным и обслуживание будут сделаны централизованно.
Примечание:
- в вышеуказанной ситуации, вы можете спросить "почему мы не можем ввести центральный сервер доступа к данным к взаимодействовать со всеми приложениями? Да. Это будет возможной альтернативой. Но,
- основным преимуществом SPs над этим подходом является то, что, в отличие от вашего кода доступа к данным со встроенными запросами, SPs являются предварительно скомпилированными операторами, поэтому они будут выполняться быстрее. А расходы на связь (по сетям) будут минимальными.
- напротив этого, SPs добавит дополнительную нагрузку на сервер базы данных. Если это будет проблемой в зависимости от ситуации, сервер централизованного доступа к данным с inline запросами будет лучшим выбором.
хранимая процедура используется для выполнения определенных задач на базе. Например
- получить наборы результатов базы данных из некоторой бизнес-логики на данных.
- выполнение нескольких операций базы данных за один вызов.
- используется для переноса данных из одной таблицы в другую таблицу.
- можно вызвать для других языков программирования, таких как Java.
хранимая процедура-это не что иное, как группа операторов SQL, скомпилированных в один план выполнения.
- создать один раз и назвать его n количество раз
- это уменьшает сетевой трафик
пример: создание хранимой процедуры
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
изменить или изменить хранимую процедуру:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
удалить или удалить хранимую процедуру:
DROP PROCEDURE GetEmployee
хранимая процедура используется для извлечения данных, изменения данных и удаления данных в таблице базы данных. Вам не нужно писать целую команду SQL каждый раз, когда вы хотите вставить, обновить или удалить данные в базе данных SQL.
хранимая процедура представляет собой предварительно скомпилированный набор из одного или нескольких операторов SQL, которые выполняют определенную задачу.
хранимая процедура должна выполняться отдельно с помощью
EXEC
хранимая процедура может возвращать несколько параметров
хранимая процедура может использоваться для реализации transact
"что такое хранимая процедура" уже ответили в других сообщениях здесь. То, что я опубликую, является одним из менее известных способов использования хранимой процедуры. Это grouping stored procedures
или numbering stored procedures
.
Справочник По Синтаксису
; number
по состоянию на этой
необязательное целое число, используемое для группировки процедур с тем же именем. Эти сгруппированные процедуры могут быть удалены вместе с помощью одной капли Заявление о процедуре
пример
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
использовать
exec FirstTest 10
exec FirstTest;2 20,30
результат
Еще Одна Попытка
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
результат
Msg 2730, Уровень 11, Состояние 1, Процедура SecondTest, Строка 1 [Строка Запуска Партии 3] Не удается создать процедуру "SecondTest" с номером группы 2, потому что процедура с таким же именем и номером группы 1 в настоящее время не существует в базе данных. Необходимо выполнить процедуру создания "SecondTest"; 1 первый.
ссылки:
- создать процедуру с синтаксисом для number
- нумерованные хранимые процедуры в SQL Server - techie-friendly.blogspot.com
- Группировка Хранимых Процедур - sqlmag
осторожностью
- после группировки процедур вы не можете отбросить их по отдельности.
- эта функция может быть удалена в будущей версии Microsoft SQL Server.
хранимая процедура-это именованная коллекция операторов SQL и процедурной логики i.e, компилируется, проверяется и хранится в базе данных сервера. Хранимая процедура обычно обрабатывается как другие объекты базы данных и управляется с помощью механизма безопасности сервера.
в СУБД хранимая процедура представляет собой набор инструкций SQL с присвоенным именем, который хранится в базе данных в скомпилированном виде, чтобы его могли совместно использовать несколько программ.
использование хранимой процедуры может быть полезным в
обеспечение контролируемого доступа к данным (конечные пользователи могут только вводить или изменять данные, но не могу писать процедуры)
обеспечение целостности данных (данные будут введены в Связном) и
повышает производительность (операторы хранимой процедуры должны быть написаны только один раз)
для простой,
Хранимая Процедура are Сохраненные Программы программы/функции хранится в базе данных.
каждая сохраненная программа содержит тело, состоящее из инструкции SQL. Этот оператор может быть составным оператором, состоящим из нескольких операторов, разделенных точкой с запятой (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
хранимые процедуры в SQL Server могут принимать входные параметры и возвращать несколько значений выходных параметров; в SQL Server программные операторы хранимых процедур выполняют операции в базе данных и возвращают значение состояния вызывающей процедуре или пакету.
преимущества использования хранимых процедур в SQL Server
они позволяют модульному программированию. Они позволяют более быстрому исполнению. Они могут уменьшить сетевой трафик. Их можно использовать как безопасность механизм.
вот пример хранимой процедуры, которая принимает параметр, выполняет запрос и возвращает результат. В частности, хранимая процедура принимает BusinessEntityID в качестве параметра и использует его для соответствия первичному ключу HumanResources.Таблица сотрудник для возврата запрошенного сотрудника.
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
я узнал это от essential.com...это очень полезно.
хранимая процедура поможет вам сделать код на сервере.Вы можете передать параметры и найти выход.
create procedure_name (para1 int,para2 decimal)
as
select * from TableName