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

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

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, скомпилированных в один план выполнения.

    1. создать один раз и назвать его n количество раз
    2. это уменьшает сетевой трафик

    пример: создание хранимой процедуры

    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.

    Справочник По Синтаксису

    enter image description here

    ; 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
    

    результат

    enter image description here

    Еще Одна Попытка

    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 первый.

    ссылки:

    1. создать процедуру с синтаксисом для number
    2. нумерованные хранимые процедуры в SQL Server - techie-friendly.blogspot.com
    3. Группировка Хранимых Процедур - sqlmag

    осторожностью

    1. после группировки процедур вы не можете отбросить их по отдельности.
    2. эта функция может быть удалена в будущей версии Microsoft SQL Server.

    хранимая процедура-это именованная коллекция операторов SQL и процедурной логики i.e, компилируется, проверяется и хранится в базе данных сервера. Хранимая процедура обычно обрабатывается как другие объекты базы данных и управляется с помощью механизма безопасности сервера.


    в СУБД хранимая процедура представляет собой набор инструкций SQL с присвоенным именем, который хранится в базе данных в скомпилированном виде, чтобы его могли совместно использовать несколько программ.

    использование хранимой процедуры может быть полезным в

    1. обеспечение контролируемого доступа к данным (конечные пользователи могут только вводить или изменять данные, но не могу писать процедуры)

    2. обеспечение целостности данных (данные будут введены в Связном) и

    3. повышает производительность (операторы хранимой процедуры должны быть написаны только один раз)


    для простой,

    Хранимая Процедура 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