Что такое хранимая процедура? Как они работают? Каков состав хранимой процедуры (вещи должны быть хранимой процедурой)?
Что такое хранимая процедура?
Ответ 1
Хранимые процедуры представляют собой пакет SQL-операторов, которые могут выполняться несколькими способами. Большинство основных DBM поддерживают хранимые процедуры; однако, не все. Вам необходимо будет проверить вашу конкретную справочную документацию по СУБД для уточнения. Поскольку я больше всего знаком с 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. Пусть говорят, что для каждой таблицы у вас есть Insert, Update, Delete и по крайней мере один выбор на основе первичного ключа, что означает, что каждая таблица будет иметь 4 процедуры. Теперь возьмите базу данных приличного размера из 400 таблиц, и у вас есть 1600 процедур! И это предполагает, что у вас нет дубликатов, которые вы, вероятно, будете делать.
Здесь используется ORM или какой-либо другой способ автоматического генерации ваших основных операций с CRUD, имеет массу преимуществ.
Ответ 2
Хранимая процедура представляет собой набор предварительно скомпилированных операторов 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 Server:
Execute employee_insert 003,’xyz’,27,1234567890
  --(Parameter size must be same as declared column size)
Пример: @Name Varchar(30)
В таблице Employee размер столбца Name должен быть varchar(30).
Ответ 3
Хранимая процедура - это группа операторов SQL, которые были созданы и сохранены в базе данных. Хранимая процедура будет принимать входные параметры, так что одна процедура может использоваться по сети несколькими клиентами с использованием разных входных данных. Хранимые процедуры уменьшают сетевой трафик и повышают производительность. Если мы изменим хранимую процедуру, все клиенты получат обновленную хранимую процедуру.
Пример создания хранимой процедуры
CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;
EXEC test_display;
Преимущества использования хранимых процедур
-  Хранимая процедура позволяет модульное программирование. Вы можете создать процедуру один раз, сохранить ее в базе данных и вызвать ее сколько угодно раз в вашей программе. 
-  Хранимая процедура позволяет ускорить выполнение. Если для операции требуется большое количество SQL-кода, которое выполняется повторно, хранимые процедуры могут быть более быстрыми. Они анализируются и оптимизируются при первом их выполнении, а скомпилированная версия хранимой процедуры остается в кеше памяти для последующего использования. Это означает, что хранимая процедура не нуждается в повторном использовании и повторной оптимизации при каждом использовании, что приводит к значительному времени выполнения. 
-  Хранимая процедура может снизить сетевой трафик. Операция, требующая сотни строк кода Transact-SQL, может выполняться через один оператор, который выполняет код в процедуре, а не путем отправки сотен строк кода по сети. 
-  Хранимые процедуры обеспечивают лучшую безопасность ваших данных. Пользователям может быть предоставлено разрешение на выполнение хранимой процедуры, даже если у них нет разрешения на выполнение инструкций процедуры напрямую. В SQL Server у нас есть разные типы хранимых процедур: - Системные хранимые процедуры
- Пользовательские хранимые процедуры
- Расширенные хранимые процедуры
 
-  System хранимые процедуры хранятся в основной базе данных, и они начинаются с префикса sp_. Эти процедуры могут использоваться для выполнения множества задач для поддержки функций SQL Server для внешних вызовов приложений в системных таблицах.Пример: sp_helptext [StoredProcedure_Name] 
-  Пользовательские хранимые процедуры обычно хранятся в пользовательской базе данных и обычно предназначены для выполнения задач в пользовательской базе данных. При кодировании этих процедур не использовать префикс sp_, потому что, если мы сначала используем префиксsp_, он проверяет основную базу данных, а затем попадает в пользовательскую базу данных.
-  Расширенные хранимые процедуры - это процедуры, вызывающие функции из файлов DLL. В настоящее время расширенные хранимые процедуры обесцениваются по той причине, что было бы лучше избегать использования расширенных хранимых процедур. 
Ответ 4
Как правило, хранимая процедура является "функцией 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-инъекций.
Ответ 5
Подумайте о такой ситуации,
- У вас есть база данных с данными.
- Существует множество различных приложений, необходимых для доступа к этой центральной базе данных, а также в будущем некоторые новые приложения.
- Если вы хотите вставить встроенные запросы базы данных для доступа к центральной базе данных, внутри каждого кода приложения индивидуально, то, вероятно, вам придется дублировать один и тот же запрос снова и снова внутри кода разных приложений.
- В такой ситуации вы можете использовать хранимые процедуры (SP). С помощью хранимых процедур вы записываете количество общих запросов (процедур) и храните их в центральной базе данных.
- Теперь дублирование работы никогда не будет происходить по-прежнему, и доступ к данным и обслуживание будут выполняться централизованно.
Примечание:
- В приведенной выше ситуации вы можете задаться вопросом: "Почему мы не можем ввести центральный сервер доступа к данным для взаимодействия со всеми приложениями? Да, это будет возможная альтернатива, но
- Основным преимуществом SP для этого подхода является то, что в отличие от вашего кода доступа к данным с встроенными запросами, SP являются предварительно скомпилированными операциями, поэтому они будут выполняться быстрее. А стоимость связи (по сетям) будет минимальной.
- Напротив, SP добавят немного нагрузки на сервер базы данных. Если это будет связано с ситуацией, лучшим выбором будет централизованный сервер доступа к данным с встроенными запросами.
Ответ 6
Хранимая процедура в основном используется для выполнения определенных задач в базе данных. Например
- Получить базы данных на основе данных бизнес-логики.
- Выполнять несколько операций с базой данных в одном вызове.
- Используется для переноса данных из одной таблицы в другую.
- Может быть вызван для других языков программирования, таких как Java.
Ответ 7
Хранимая процедура - это не что иное, как группа операторов 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
Ответ 8
Хранимая процедура используется для извлечения данных, изменения данных и удаления данных в таблице базы данных. Вам не нужно писать целую команду SQL каждый раз, когда вы хотите вставлять, обновлять или удалять данные в базе данных SQL.
Ответ 9
 "Что такое хранимая процедура" уже ответил на другие сообщения здесь. То, что я опубликую, является менее известным способом использования хранимой процедуры. Это grouping stored procedures или numbering stored procedures.
Ссылка на синтаксис
 ; number согласно this
Необязательное целое число, которое используется для группировки процедур с тем же именем. Эти сгруппированные процедуры можно сбрасывать вместе, используя один оператор DROP PROCEDURE
Пример
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. Должен выполнить CREATE PROCEDURE "SecondTest", сначала первый.
Ссылки
- CREATE PROCEDURE с синтаксисом номера
- Нумерованные хранимые процедуры в SQL Server - techie-friendly.blogspot.com
- Группирование хранимых процедур - sqlmag
Внимание
- После группировки процедур вы не можете отбросить их по отдельности.
- Эта функция может быть удалена в будущей версии Microsoft SQL Server.
Ответ 10
Хранимая процедура представляет собой именованную коллекцию операторов SQL и процедурной логики, то есть, скомпилирована, проверена и сохранена в базе данных сервера. Хранимая процедура обычно обрабатывается как другие объекты базы данных и контролируется механизмом безопасности сервера.
Ответ 11
-  Хранимая процедура представляет собой предварительно скомпилированный набор из одного или нескольких операторов SQL, которые выполняют определенную задачу. 
-  Хранимая процедура должна выполняться автономно, используя EXEC
-  Хранимая процедура может возвращать несколько параметров 
-  Хранимая процедура может использоваться для реализации транзакции 
Ответ 12
В СУБД хранимая процедура представляет собой набор операторов SQL с назначенным именем, которое хранится в базе данных в скомпилированной форме, чтобы ее можно было использовать несколькими программами.
Использование хранимой процедуры может быть полезно в
-  Предоставление контролируемого доступа к данным (конечные пользователи могут вводить или изменять данные, но не могут писать процедуры) 
-  Обеспечение целостности данных (данные будут вводиться согласованным образом) и 
-  Повышает производительность (инструкции хранимой процедуры нужно писать только один раз) 
Ответ 13
для простого,
Сохраненная процедура Сохраненные программы. Программа/функция, хранящаяся в базе данных.
Каждая сохраненная программа содержит тело, состоящее из оператора SQL. Этот оператор может представлять собой составной оператор, состоящий из нескольких операторов, разделенных символами с запятой (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
Ответ 14
Хранимые процедуры в SQL Server могут принимать входные параметры и возвращать несколько значений выходных параметров; в SQL Server, операторы программных процедур хранимых процедур для выполнения операций в базе данных и возврата значения статуса в вызывающую процедуру или пакет.
Преимущества использования хранимых процедур в SQL Server
Они позволяют модульное программирование. Они позволяют ускорить выполнение. Они могут сократить сетевой трафик. Они могут использоваться как механизм безопасности.
Вот пример хранимой процедуры, которая принимает параметр, выполняет запрос и возвращает результат. В частности, хранимая процедура принимает значение BusinessEntityID в качестве параметра и использует его для соответствия первичному ключу таблицы HumanResources.Employee, чтобы вернуть запрошенного сотрудника.
> 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 [email protected]     <<<---parameter used as criteria
end
Я узнал об этом от essential.com... это очень полезно.


