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



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

812   15  

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-инъекций.

хранимые процедуры имеют недостатки, в основном обслуживание, связанное с вашим базовым 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, которая была создана и сохранена в базе данных. Хранимая процедура принимает входные параметры, так что одна процедура может использоваться по сети несколькими клиентами, использующими разные входные данные. А хранимые процедуры уменьшат сетевой трафик и повысят производительность. Если мы изменим хранимую процедуру, все клиенты получат обновленную хранимую процедуру.

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

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 добавит дополнительную нагрузку на сервер базы данных. Если это будет проблемой, в зависимости от ситуации, централизованный сервер доступа к данным с помощью встроенных запросов будет лучшим выбором.

    хранимая процедура используется для выполнения определенных задач на базе. Например

    • получить результирующие наборы базы данных из некоторых бизнес-логики на данных.
    • выполнить несколько операций с базой данных в одном вызове.
    • используется для переноса данных из одной таблицы в другую таблицу.
    • может быть вызван для других языков программирования, таких как 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 в настоящее время не существует в базе данных. Необходимо выполнить процедуру CREATE 'SecondTest'; 1 first.

    ссылки:

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

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

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

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

    в СУБД хранимая процедура представляет собой набор инструкций 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...it это очень полезно.

    хранимая процедура поможет вам сделать код на сервере.Вы можете передать параметры и найти выход.

    create procedure_name (para1 int,para2 decimal)
    as
    select * from TableName
    

    Comments

      Ничего не найдено.