Подтвердить что ты не робот

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

Что такое хранимая процедура? Как они работают? Каков состав хранимой процедуры (вещи должны быть хранимой процедурой)?

4b9b3361

Ответ 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", сначала первый.

Ссылки

Внимание

  • После группировки процедур вы не можете отбросить их по отдельности.
  • Эта функция может быть удалена в будущей версии 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... это очень полезно.