Що таке збережена процедура?


298

Що таке "збережена процедура" і як вони працюють?

Що являє собою склад збереженої процедури (всі речі повинні бути збереженою процедурою)?

Відповіді:


243

Збережені процедури - це пакет операторів 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 . Скажімо, для кожної таблиці ви маєте пункт Вставка, оновлення, видалення та принаймні один вибір на основі первинного ключа, тобто кожна таблиця матиме 4 процедури. Тепер візьміть базу даних пристойного розміру з 400 таблиць, і у вас є 1600 процедур! І це припускаючи, що у вас немає дублікатів, які, напевно, будете.

Саме тут використання ORM або якогось іншого методу для автоматичного генерування основних операцій CRUD має багато заслуг.


1
Ви маєте на увазі Збережена процедура для читання даних і ORMхочете Entity Frameworkробити CRUDоперації?
shaijut

2
Так, це один із можливих підходів. Ми використовуємо ORM для всього, окрім звітів
JoshBerke

Більш детально про збережену процедуру ви можете звернутися до моєї URL-адреси techflirt.com/mysql-stored-procedure-tutorial
Ankur Kumar Singh

150

Збережена процедура - це набір попередньо складених операторів 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)

Тоді по-друге, я вставляю значення в таблицю працівника

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).


1
Приклад, який легко зрозуміти
HaFiz Umer

80

Збережена процедура - це група операторів SQL, створена і зберігається в базі даних. Збережена процедура приймає вхідні параметри, так що одну процедуру може використовувати через мережу кілька клієнтів, використовуючи різні вхідні дані. Збережені процедури зменшать мережевий трафік та збільшать продуктивність. Якщо ми змінимо збережену процедуру, всі клієнти отримають оновлену збережену процедуру.

Зразок створення збереженої процедури

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Переваги використання збережених процедур

  • Збережена процедура дозволяє модульне програмування.

    Ви можете створити процедуру один раз, зберігати її в базі даних і викликати її будь-яку кількість разів у своїй програмі.

  • Збережена процедура дозволяє швидше виконувати.

    Якщо для операції потрібна велика кількість SQL-коду, який виконується повторно, збережені процедури можуть бути швидшими. Вони аналізуються та оптимізуються при їх першому виконанні, а складена версія збереженої процедури залишається в кеш-пам'яті для подальшого використання. Це означає, що збережену процедуру не потрібно переосмислювати та повторно оптимізувати при кожному використанні, що призводить до набагато швидших термінів виконання.

  • Збережена процедура може зменшити мережевий трафік.

    Операція, що вимагає сотні рядків коду Transact-SQL, може бути виконана за допомогою одного оператора, який виконує код у процедурі, а не надсилаючи сотні рядків коду по мережі.

  • Збережені процедури забезпечують кращу безпеку ваших даних

    Користувачі можуть надати дозвіл на виконання збереженої процедури, навіть якщо вони не мають дозволу безпосередньо виконувати висловлювання процедури.

    У SQL Server у нас зберігаються різні типи процедур:

    • Система, що зберігається
    • Визначені користувачем збережені процедури
    • Розширені збережені процедури
  • Системне -stored процедура зберігається в основній базі даних , і цих почав з sp_префіксом. Ці процедури можна використовувати для виконання різноманітних завдань для підтримки функцій SQL Server для зовнішніх викликів додатків у системних таблицях

    Приклад: sp_helptext [StoredProcedure_Name]

  • Зазначені користувачем збережені процедури зазвичай зберігаються в базі даних користувачів і, як правило, розроблені для виконання завдань в базі даних користувача. Під час кодування ці процедури не використовуються в sp_префікс , тому що якщо ми будемо використовувати sp_префікс першого, він буде перевіряти головну базу даних, а потім він приходить до певних користувачем бази даних.

  • Розширені збережені процедури - це процедури, що викликають функції з файлів DLL. На сьогоднішній день розширені збережені процедури застаріли з тієї причини, що було б краще уникати використання розширених збережених процедур.


37

Як правило, збережена процедура - це "функція 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.


16

Подумайте про таку ситуацію,

  • У вас є база даних з даними.
  • Для доступу до цієї центральної бази даних потрібна низка різних додатків, а в майбутньому і нових додатків.
  • Якщо ви збираєтеся вставляти запити вбудованої бази даних для доступу до центральної бази даних, всередині коду кожної програми окремо, то, ймовірно, вам доведеться повторювати один і той же запит знову і знову всередині коду різних програм.
  • У такій ситуації ви можете використовувати збережені процедури (SP). Зі збереженими процедурами ви записуєте кількість загальних запитів (процедур) і зберігаєте їх у центральній базі даних.
  • Тепер дублювання роботи ніколи не відбуватиметься, як раніше, а доступ до даних та їх обслуговування буде здійснюватися централізовано.

ПРИМІТКА:

  • У наведеній вище ситуації вам може бути цікаво "Чому ми не можемо запровадити центральний сервер доступу до даних для взаємодії з усіма програмами? Так. Це буде можливою альтернативою. Але,
  • Основна перевага SP в такому підході полягає в тому, що на відміну від коду доступу до даних із вбудованими запитами, SP-файли є попередньо складеними висловлюваннями, тому вони виконуватимуться швидше. А витрати на зв’язок (через мережі) будуть мінімальними.
  • Навпаки, SP-програми додадуть ще трохи навантаження на сервер бази даних. Якщо це викликає занепокоєння відповідно до ситуації, кращим вибором стане централізований сервер доступу до даних із вбудованими запитами.

9

Збережена процедура в основному використовується для виконання певних завдань у базі даних. Наприклад

  • Отримайте набори результатів бази даних з деякої логіки бізнесу на даних.
  • Виконайте кілька операцій з базою даних за один виклик.
  • Використовується для переміщення даних з однієї таблиці в іншу.
  • Можна викликати інші мови програмування, наприклад, Java.

7

Збережена процедура - це не що інше, як група операторів 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

6

Збережена процедура використовується для отримання даних, зміни даних та видалення даних у таблиці баз даних. Вам не потрібно писати цілу команду SQL кожен раз, коли потрібно вставити, оновити або видалити дані в базі даних SQL.


4
  • Збережена процедура - це попередньо складений набір одного або декількох операторів SQL, які виконують певну задачу.

  • Збережена процедура повинна виконуватися окремо за допомогою EXEC

  • Збережена процедура може повертати кілька параметрів

  • Збережена процедура може бути використана для здійснення транзакцій


4

"Що таке збережена процедура" вже відповіли в інших публікаціях тут. Що я опублікую - це один менш відомий спосіб використання збереженої процедури. Це grouping stored proceduresабоnumbering stored procedures .

Посилання на синтаксис

введіть тут опис зображення

; numberвідповідно до цього

Необов’язкове ціле число, яке використовується для групування однойменних процедур. Ці згруповані процедури можна скинути разом за допомогою одного оператора 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 ПРОЦЕДУРУ "SecondTest"; 1 перший.

Список літератури :

  1. СТВОРИТИ ПРОЦЕДУРУ з синтаксисом числа
  2. Пронумеровані збережені процедури в SQL Server - techie-friendly.blogspot.com
  3. Групування збережених процедур - sqlmag

ОБЕРЕЖНО

  1. Після групування процедур ви не можете їх опустити окремо.
  2. Ця функція може бути видалена в майбутній версії Microsoft SQL Server.

0

Збережена процедура - це іменована колекція операторів SQL та логіки процедур, тобто скомпільована, перевірена та збережена в базі даних сервера. Збережена процедура, як правило, обробляється як інші об'єкти бази даних та контролюється через механізм захисту сервера.


0

У СУБД збережена процедура - це набір операторів SQL з присвоєним ім'ям, які зберігаються в базі даних у складеному вигляді, щоб ними можна було ділитися низкою програм.

Використання збереженої процедури може бути корисною для

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

  2. Забезпечення цілісності даних (дані будуть вводитись послідовно) та

  3. Підвищує продуктивність (заяви про збережену процедуру потрібно писати лише один раз)


0

для простого,

Збережена процедура - це збережені програми , програма / функція, що зберігаються в базі даних.

Кожна збережена програма містить тіло, яке складається з оператора SQL. Цей вислів може бути складною заявою, що складається з декількох тверджень, розділених символами крапки з комою (;).

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;

0

Збережені процедури в SQL Server можуть приймати вхідні параметри і повертати кілька значень вихідних параметрів; у SQL Server, що зберігається у програмі операторами програми для виконання операцій у базі даних та повернення значення стану процедурі виклику або пакеті.

Переваги використання збережених процедур у SQL Server

Вони дозволяють модульне програмування. Вони дозволяють швидше виконати. Вони можуть зменшити мережевий трафік. Вони можуть використовуватися як механізм безпеки.

Ось приклад збереженої процедури, яка приймає параметр, виконує запит і повертає результат. Зокрема, збережена процедура приймає BusinessEntityID як параметр і використовує це для узгодження з первинним ключем таблиці HumanResources.E 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 =@businessEntityId     <<<---parameter used as criteria
end

Я дізнався це на веб-сайті basic.com ... це дуже корисно.


0

Збережена процедура допоможе вам ввести код на сервері. Ви можете передати параметри та знайти вихід.

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

0

Записи в Збережених процедурах пишуться лише один раз і зменшують мережевий трафік між клієнтами та серверами. Ми також можемо уникнути атак ін'єкцій Sql.

  • У випадку, якщо ви використовуєте програму третьої сторони у вашій заявці для обробки платежів, тут база даних повинна розкривати лише необхідну їй інформацію та діяльність, яку ця третя сторона уповноважила, цим ми можемо досягти конфіденційності даних, встановивши дозволи, використовуючи збережені процедури.
  • Оновлення таблиці слід проводити лише до націленої на неї таблиці, але вона не повинна оновлювати будь-яку іншу таблицю, за допомогою якої ми можемо досягти цілісності даних, використовуючи обробку транзакцій та обробку помилок.
  • Якщо ви хочете повернути один або кілька елементів із типом даних, тоді краще використовувати вихідний параметр.
  • У Збережених процедурах ми використовуємо вихідний параметр для всього, що потрібно повернути. Якщо ви хочете повернути лише один елемент із лише цілим типом даних, тоді краще використати значення повернення. Насправді повернене значення полягає лише в тому, щоб повідомити про успіх або невдачу збереженої процедури.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.