Co to jest procedura składowana?

Co to jest procedura składowana? Jak działają? Co składa się na procedurę składowaną (każda z rzeczy musi być procedurą składowaną)?

Author: George Stocker, 2009-01-20

15 answers

Procedury składowane to zbiór poleceń SQL, które można wykonać na kilka sposobów. Większość głównych DBMs obsługuje procedury przechowywane; jednak nie wszystkie tak robią. Będziesz musiał zweryfikować z konkretną dokumentacją pomocy DBMS pod kątem szczegółów. Ponieważ jestem najbardziej zaznajomiony z SQL Server użyję go jako moich próbek.

Aby utworzyć procedurę składowaną składnia jest dość prosta:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Więc na przykład:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

Zaletą procedur przechowywanych jest możliwość scentralizowania danych dostęp do logiki w jednym miejscu, które jest następnie łatwe do optymalizacji przez DBA. Procedury składowane mają również korzyści bezpieczeństwa, ponieważ można przyznać prawa do wykonania procedury składowanej, ale użytkownik nie będzie musiał mieć uprawnień do odczytu/zapisu w bazowych tabelach. Jest to dobry pierwszy krok przeciwko SQL injection.

Procedury przechowywane mają wady, zasadniczo utrzymanie związane z podstawową operacją CRUD . Załóżmy, że dla każdej tabeli masz wkładkę, Zaktualizuj, Usuń i co najmniej jeden wybór na podstawie klucza podstawowego, co oznacza, że każda tabela będzie miała 4 procedury. Teraz weź przyzwoity rozmiar bazy danych 400 tabel, i masz 1600 procedur! Zakładając, że nie masz duplikatów, które prawdopodobnie będziesz miał.

Tutaj użycie ORM lub innej metody automatycznego generowania podstawowych operacji CRUD ma mnóstwo zalet.

 207
Author: JoshBerke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 18:51:43

Procedura składowana jest zbiorem wstępnie skompilowanych instrukcji SQL, które są używane do wykonywania zadań specjalnych.

Przykład: jeśli mam Employee tabelę

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

Najpierw odzyskuję Employee tabelę:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

Aby uruchomić procedurę na serwerze SQL:

Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

Następnie wstawiam wartość do tabeli pracowników

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

Aby uruchomić procedurę parametryzacji na serwerze SQL:

Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

Przykład: @Name Varchar(30)

W tabeli Employee Name rozmiar kolumny musi wynosić varchar(30).

 132
Author: sidhewsar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 19:14:58

Procedura składowana to grupa poleceń SQL, które zostały utworzone i zapisane w bazie danych. Procedura składowana akceptuje parametry wejściowe, dzięki czemu pojedyncza procedura może być używana przez sieć przez kilku klientów korzystających z różnych danych wejściowych. Procedury przechowywane zmniejszą ruch sieciowy i zwiększą wydajność. Jeśli zmodyfikujemy procedurę składowaną, wszyscy klienci otrzymają zaktualizowaną procedurę składowaną.

Przykład tworzenia procedury składowanej

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Zalety stosowania procedur składowanych

  • Procedura składowana umożliwia programowanie modułowe.

    Możesz utworzyć procedurę raz, zapisać ją w bazie danych i wywołać dowolną liczbę razy w swoim programie.

  • Procedura składowana pozwala na szybsze wykonanie.

    Jeśli operacja wymaga dużej ilości kodu SQL, która jest wykonywana powtarzalnie, procedury przechowywane mogą być szybsze. Są przetwarzane i optymalizowane, gdy są wykonywane po raz pierwszy, a skompilowane wersja procedury składowanej pozostaje w pamięci podręcznej do późniejszego użycia. Oznacza to, że procedura składowana nie musi być reparsowana i ponownie optymalizowana przy każdym użyciu, co skutkuje znacznie krótszym czasem wykonania.

  • Procedura składowana może zmniejszyć ruch sieciowy.

    Operacja wymagająca setek linii kodu Transact-SQL może być wykonana za pomocą pojedynczej instrukcji, która wykonuje kod w procedurze, a nie wysyłając setki linii kodu przez sieć.

  • Procedury przechowywane zapewniają lepsze bezpieczeństwo danych

    Użytkownicy mogą otrzymać pozwolenie na wykonanie procedury składowanej, nawet jeśli nie mają pozwolenia na bezpośrednie wykonanie instrukcji procedury.

    W SQL Server mamy różne typy procedur składowanych:

    • procedury przechowywane w systemie
    • procedury składowane zdefiniowane przez Użytkownika
    • Extended stored Procedury
  • System - procedury przechowywane są przechowywane w głównej bazie danych i zaczynają się od prefiksu sp_. Procedury te mogą być używane do wykonywania różnych zadań obsługujących funkcje SQL Server dla zewnętrznych wywołań aplikacji w tabelach systemowych

    Przykład: sp_helptext [StoredProcedure_Name]

  • Procedury przechowywane zdefiniowane przez Użytkownika są zwykle przechowywane w bazie danych użytkownika i są zazwyczaj zaprojektowane tak, aby zadania w bazie danych użytkowników. Podczas kodowania tych procedur nie należy używać prefiksu sp_, ponieważ jeśli najpierw użyjemy prefiksu sp_, sprawdzi on główną bazę danych, a następnie dojdzie do zdefiniowanej przez użytkownika bazy danych.

  • Extended procedury składowane są procedurami, które wywołują funkcje z plików DLL. Obecnie rozszerzone procedury składowane są przestarzałe z tego powodu, że lepiej byłoby unikać stosowania rozszerzonych procedur składowanych.

 67
Author: Kanwar Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 20:02:12

Ogólnie, procedura składowana jest " funkcją SQL."Mają:

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

Jest to przykład skupiony na T-SQL. Procedury przechowywane mogą wykonywać większość poleceń SQL, zwracać wartości skalarne i tabel i są uważane za bardziej bezpieczne, ponieważ zapobiegają atakom SQL injection.

 31
Author: Dave Swersky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-13 10:53:23

Pomyśl o takiej sytuacji,

    Masz bazę danych z danymi.
  • Istnieje wiele różnych aplikacji potrzebnych do uzyskania dostępu do tej centralnej bazy danych, a w przyszłości także kilka nowych aplikacji.
  • Jeśli chcesz wstawić wewnętrzne zapytania do bazy danych, aby uzyskać dostęp do centralnej bazy danych, w kodzie każdej aplikacji indywidualnie, prawdopodobnie będziesz musiał ponownie powielać to samo zapytanie w kodzie różnych aplikacji.
  • w tym rodzaju sytuacji, można użyć procedur składowanych (SPs). Dzięki procedurom przechowywanym zapisujesz liczbę typowych zapytań (procedur) i przechowujesz je w centralnej bazie danych.
  • Teraz powielanie pracy nigdy nie nastąpi tak jak wcześniej, a dostęp do danych i konserwacja będą wykonywane centralnie.

Uwaga:

  • w powyższej sytuacji możesz się zastanawiać: "dlaczego nie możemy wprowadzić centralnego serwera dostępu do danych do interakcji ze wszystkimi aplikacjami? Tak. To będzie możliwa alternatywa. Ale,
  • główną zaletą SPS nad tym podejściem jest to, w przeciwieństwie do kodu dostępu do danych z zapytaniami inline, SPs są wstępnie skompilowanymi instrukcjami, więc będą działać szybciej. A koszty komunikacji (za pośrednictwem sieci) będą minimalne.
  • W przeciwieństwie do tego, SPs doda trochę więcej obciążenia do serwera bazy danych. Jeśli byłoby to problemem w zależności od sytuacji, scentralizowany serwer dostępu do danych z zapytaniami inline będzie lepszym wyborem.
 13
Author: Supun Wijerathne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:31:47

Procedura składowana jest używana głównie do wykonywania określonych zadań w bazie danych. Na przykład

  • pobranie zestawów wyników bazy danych z logiki biznesowej na danych.
  • wykonywanie wielu operacji bazodanowych w jednym wywołaniu.
  • używany do migracji danych z jednej tabeli do drugiej tabeli.
  • może być wywołany dla innych języków programowania, takich jak Java.
 6
Author: MAA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:01:52

Procedura składowana to nic innego jak grupa poleceń SQL skompilowanych w jeden plan wykonania.

  1. Utwórz raz i nazwij go n liczba razy
  2. zmniejsza ruch sieciowy

Przykład: tworzenie procedury składowanej

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

Zmiana lub modyfikacja procedury składowanej:

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

Upuść lub usuń procedurę składowaną:

DROP PROCEDURE GetEmployee
 5
Author: user5723819,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-01 08:28:18

Procedura składowana jest używana do pobierania danych, modyfikowania danych i usuwania danych z tabeli bazy danych. Nie musisz pisać całego polecenia SQL za każdym razem, gdy chcesz wstawić, zaktualizować lub usunąć dane w bazie danych SQL.

 5
Author: venkat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:02:41
  • Procedura składowana jest wstępnie skompilowanym zestawem jednego lub więcej poleceń SQL, które wykonują określone zadanie.

  • Procedura składowana powinna być wykonywana samodzielnie przy użyciu EXEC

  • Procedura składowana może zwracać wiele parametrów

  • Procedura składowana może być użyta do implementacji transact

 3
Author: Kedarnath M S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:32:57

"Co to jest procedura składowana" jest już odpowiedział w innych postach tutaj. To, co napiszę, to jeden mniej znany sposób korzystania z procedury składowanej. Jest to grouping stored procedures lub numbering stored procedures.

Syntax Reference

Tutaj wpisz opis obrazka

; number Jak na to

Opcjonalna liczba całkowita używana do grupowania procedur o tej samej nazwie. Te zgrupowane procedury można upuścić razem za pomocą jednej procedury upuszczenia oświadczenie

Przykład

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

Użyj

exec FirstTest 10
exec FirstTest;2 20,30

Wynik

Tutaj wpisz opis obrazka

Kolejna Próba

CREATE Procedure SecondTest;2
(
     @InputA INT,
     @InputB INT
)
AS 
BEGIN

SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)

END
GO

Wynik

Msg 2730, Level 11, State 1, Procedure SecondTest, Line 1 [Batch Start Line 3] Nie można utworzyć procedury 'SecondTest' z numerem grupy 2, ponieważ procedura o tej samej nazwie i numerze grupy 1 nie istnieje obecnie w bazie danych. Musi wykonaj procedurę CREATE 'SecondTest'; 1 pierwszy.

Referencje :

  1. Utwórz procedurę ze składnią dla liczby
  2. numerowane procedury przechowywane w SQL Server - techie-friendly.blogspot.com
  3. grupowanie procedur składowanych - Sqlmag

Uwaga

  1. Po pogrupowaniu procedur, nie możesz ich odrzucić indywidualnie.
  2. ta funkcja może zostać usunięta w przyszłości wersja Microsoft SQL Server.
 2
Author: Lijo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-15 18:34:21

Procedura składowana jest nazwanym zbiorem instrukcji SQL i logiki proceduralnej, tj. skompilowanym, zweryfikowanym i przechowywanym w bazie danych serwera. Procedura składowana jest zazwyczaj traktowana jak inne obiekty bazy danych i kontrolowana przez mechanizm bezpieczeństwa serwera.

 0
Author: Nirmala Hansdak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:03:25

W DBMS, procedura składowana jest zestawem poleceń SQL z przypisaną nazwą, która jest przechowywana w bazie danych w formie skompilowanej, dzięki czemu może być współdzielona przez wiele programów.

Użycie procedury składowanej może być pomocne w

  1. Zapewnienie kontrolowanego dostępu do danych (użytkownicy końcowi mogą tylko wprowadzać lub zmieniać dane, ale nie mogą pisać procedur)

  2. Zapewnienie integralności danych (Dane będą wprowadzane w sposób spójny) oraz

  3. Poprawia produktywność (instrukcje procedury składowanej muszą być zapisane tylko raz)

 0
Author: Naina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:33:57

Dla prostych,

Procedura składowana to programy przechowywane , program / Funkcja przechowywana w bazie danych.

Każdy przechowywany program zawiera ciało, które składa się z instrukcji SQL. Instrukcja ta może być złożoną instrukcją złożoną z kilku instrukcji oddzielonych średnikiem (;).

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
 0
Author: AZinkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 12:04:55

Procedury składowane w SQL Server mogą przyjmować parametry wejściowe i zwracać wiele wartości parametrów wyjściowych; w SQL Server procedury składowane polecenia programu do wykonywania operacji w bazie danych i zwracają wartość statusu do procedury wywołującej lub partii.

Korzyści z używania procedur składowanych w SQL Server

Pozwalają na programowanie modułowe. Pozwalają na szybszą realizację. Mogą one zmniejszyć ruch sieciowy. Mogą być stosowane jako mechanizm bezpieczeństwa.

Oto przykład procedury składowanej, która pobiera parametr, wykonuje zapytanie i zwraca wynik. W szczególności, procedura składowana akceptuje Business Entityid jako parametr i wykorzystuje go do dopasowania klucza podstawowego Zasobów Ludzkich.Tabela pracowników, aby zwrócić żądanego pracownika.

> 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

Nauczyłem się tego od essential.com...it jest bardzo przydatna.

 0
Author: Jerold Joel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 07:37:18

Procedura składowana pomoże Ci stworzyć kod na serwerze.Możesz przekazać parametry i znaleźć wyjście.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName
 0
Author: Biddut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-07 19:04:54