Che cos'è una procedura memorizzata?


298

Che cos'è una "procedura memorizzata" e come funzionano?

Qual è la composizione di una procedura memorizzata (ogni cosa deve essere una procedura memorizzata)?

Risposte:


243

Le stored procedure sono un batch di istruzioni SQL che possono essere eseguite in un paio di modi. La maggior parte dei principali DBM supporta procedure memorizzate; tuttavia, non tutti lo fanno. Sarà necessario verificare con la documentazione di aiuto DBMS particolare per specifiche. Come ho più familiarità con SQL Server lo userò come i miei campioni.

Per creare una procedura memorizzata la sintassi è abbastanza semplice:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Quindi per esempio:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

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

Un vantaggio delle procedure memorizzate è che è possibile centralizzare la logica di accesso ai dati in un unico posto che è quindi facile da ottimizzare per i DBA. Le procedure memorizzate hanno anche un vantaggio in termini di sicurezza in quanto è possibile concedere diritti di esecuzione a una procedura memorizzata, ma l'utente non dovrà disporre delle autorizzazioni di lettura / scrittura sulle tabelle sottostanti. Questo è un buon primo passo contro l'iniezione SQL.

Le procedure memorizzate presentano degli svantaggi, fondamentalmente la manutenzione associata all'operazione CRUD di base . Diciamo per ogni tabella che hai un Inserisci, Aggiorna, Elimina e almeno una selezione basata sulla chiave primaria, ciò significa che ogni tabella avrà 4 procedure. Ora prendi un database di dimensioni decenti di 400 tabelle e hai 1600 procedure! E questo presuppone che non hai duplicati che probabilmente avrai.

È qui che l'utilizzo di un ORM o di un altro metodo per generare automaticamente le operazioni CRUD di base ha un sacco di meriti.


1
Intendi procedura memorizzata per leggere i dati e ti ORMpiace Entity Frameworkfare CRUDoperazioni?
shaijut,

2
Sì, questo è un possibile approccio. Usiamo gli ORM per tutto tranne che per i rapporti
JoshBerke,

Per maggiori dettagli sulla procedura memorizzata puoi consultare il mio URL techflirt.com/mysql-stored-procedure-tutorial
Ankur Kumar Singh

150

Una procedura memorizzata è un insieme di istruzioni SQL precompilate utilizzate per eseguire un'attività speciale.

Esempio: se ho un Employeetavolo

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

Per prima cosa sto recuperando la Employeetabella:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

Per eseguire la procedura su SQL Server:

Execute   Employee details

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

Quindi, in secondo luogo, sto inserendo il valore nella tabella 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

Per eseguire la procedura parametrizzata su SQL Server:

Execute employee_insert 003,’xyz’,27,1234567890

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

Esempio: @Name Varchar(30)

Nella Employeetabella le Namedimensioni della colonna devono essere varchar(30).


1
esempio così facile da capire
HaFiz Umer,

80

Una procedura memorizzata è un gruppo di istruzioni SQL create e archiviate nel database. Una procedura memorizzata accetterà i parametri di input in modo che una singola procedura possa essere utilizzata sulla rete da più client utilizzando dati di input diversi. Una stored procedure ridurrà il traffico di rete e aumenterà le prestazioni. Se modifichiamo una procedura memorizzata, tutti i client otterranno la procedura memorizzata aggiornata.

Esempio di creazione di una procedura memorizzata

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Vantaggi dell'utilizzo di stored procedure

  • Una procedura memorizzata consente la programmazione modulare.

    È possibile creare una volta la procedura, archiviarla nel database e chiamarla un numero qualsiasi di volte nel programma.

  • Una procedura memorizzata consente un'esecuzione più rapida.

    Se l'operazione richiede una grande quantità di codice SQL che viene eseguita ripetutamente, le procedure memorizzate possono essere più veloci. Vengono analizzati e ottimizzati quando vengono eseguiti per la prima volta e una versione compilata della procedura memorizzata rimane in una cache di memoria per un uso successivo. Ciò significa che la procedura memorizzata non deve essere ripetuta e ottimizzata con ogni utilizzo, con conseguenti tempi di esecuzione molto più rapidi.

  • Una procedura memorizzata può ridurre il traffico di rete.

    Un'operazione che richiede centinaia di righe di codice Transact-SQL può essere eseguita tramite una singola istruzione che esegue il codice in una procedura, anziché inviando centinaia di righe di codice sulla rete.

  • Le procedure memorizzate forniscono una migliore sicurezza per i tuoi dati

    Agli utenti può essere concessa l'autorizzazione per eseguire una procedura memorizzata anche se non dispongono dell'autorizzazione per eseguire direttamente le istruzioni della procedura.

    In SQL Server abbiamo diversi tipi di procedure memorizzate:

    • Procedure memorizzate dal sistema
    • Procedure memorizzate definite dall'utente
    • Procedure memorizzate estese
  • Le procedure memorizzate nel sistema sono archiviate nel database principale e iniziano con un sp_prefisso. Queste procedure possono essere utilizzate per eseguire una varietà di attività per supportare le funzioni di SQL Server per le chiamate esterne dell'applicazione nelle tabelle di sistema

    Esempio: sp_helptext [StoredProcedure_Name]

  • Le procedure memorizzate definite dall'utente vengono generalmente archiviate in un database utente e sono progettate in genere per completare le attività nel database utente. Durante la codifica di queste procedure non si utilizza il sp_prefisso perché se si utilizza sp_prima il prefisso, controllerà il database principale, quindi verrà fornito al database definito dall'utente.

  • Le stored procedure estese sono le procedure che richiamano funzioni dai file DLL. Al giorno d'oggi, le stored procedure estese sono deprecate per il motivo per cui sarebbe meglio evitare l'utilizzo di stored procedure estese.


37

Generalmente, una procedura memorizzata è una "Funzione SQL". Loro hanno:

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

Questo è un esempio focalizzato su T-SQL. Le procedure memorizzate possono eseguire la maggior parte delle istruzioni SQL, restituire valori scalari e basati su tabella e sono considerate più sicure perché impediscono gli attacchi di iniezione SQL.


16

Pensa a una situazione come questa,

  • Hai un database con dati.
  • Esistono diverse applicazioni necessarie per accedere a quel database centrale e in futuro anche alcune nuove applicazioni.
  • Se hai intenzione di inserire le query del database inline per accedere al database centrale, all'interno del codice di ciascuna applicazione individualmente, allora probabilmente devi duplicare la stessa query più volte nel codice di applicazioni diverse.
  • In quel tipo di situazione, è possibile utilizzare le stored procedure (SP). Con le stored procedure, si sta scrivendo il numero di query (procedure) comuni e le si memorizza con il database centrale.
  • Ora la duplicazione del lavoro non avverrà mai come prima e l'accesso ai dati e la manutenzione saranno eseguiti centralmente.

NOTA:

  • Nella situazione sopra, potresti chiederti "Perché non possiamo introdurre un server di accesso ai dati centrale per interagire con tutte le applicazioni? Sì. Sarà una possibile alternativa. Ma,
  • Il vantaggio principale degli SP rispetto a questo approccio è che, diversamente dal codice di accesso ai dati con query incorporate, gli SP sono istruzioni precompilate, quindi verranno eseguite più rapidamente. E i costi di comunicazione (sulle reti) saranno minimi.
  • Di fronte a ciò, gli SP aggiungeranno un po 'più di carico al server del database. Se ciò rappresentasse un problema in base alla situazione, una scelta migliore sarebbe un server centralizzato di accesso ai dati con query in linea.

9

Una procedura memorizzata viene utilizzata principalmente per eseguire determinate attività su un database. Per esempio

  • Ottieni set di risultati del database da alcune logiche aziendali sui dati.
  • Eseguire più operazioni di database in una singola chiamata.
  • Utilizzato per migrare i dati da una tabella a un'altra tabella.
  • Può essere chiamato per altri linguaggi di programmazione, come Java.

7

Una procedura memorizzata non è altro che un gruppo di istruzioni SQL compilate in un unico piano di esecuzione.

  1. Crea una volta e chiamalo n numero di volte
  2. Riduce il traffico di rete

Esempio: creazione di una procedura memorizzata

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

Modificare o modificare una procedura memorizzata:

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

Rilascia o elimina una procedura memorizzata:

DROP PROCEDURE GetEmployee

6

Una procedura memorizzata viene utilizzata per recuperare i dati, modificare i dati ed eliminare i dati nella tabella del database. Non è necessario scrivere un intero comando SQL ogni volta che si desidera inserire, aggiornare o eliminare i dati in un database SQL.


4
  • Una procedura memorizzata è un set precompilato di una o più istruzioni SQL che eseguono alcune attività specifiche.

  • Una procedura memorizzata deve essere eseguita autonomamente utilizzando EXEC

  • Una procedura memorizzata può restituire più parametri

  • Una procedura memorizzata può essere utilizzata per implementare transact


4

"Che cos'è una stored procedure" ha già ricevuto risposta in altri post qui. Quello che posterò è un modo meno noto di usare la stored procedure. È grouping stored procedureso numbering stored procedures.

Sintassi di riferimento

inserisci qui la descrizione dell'immagine

; numbersecondo questo

Un numero intero facoltativo utilizzato per raggruppare le procedure con lo stesso nome. Queste procedure raggruppate possono essere eliminate insieme usando un'istruzione DROP PROCEDURE

Esempio

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

Uso

exec FirstTest 10
exec FirstTest;2 20,30

Risultato

inserisci qui la descrizione dell'immagine

Un altro tentativo

CREATE Procedure SecondTest;2
(
     @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Risultato

Messaggio 2730, livello 11, stato 1, procedura SecondTest, riga 1 [Batch Start Line 3] Impossibile creare la procedura "SecondTest" con un numero di gruppo di 2 perché al momento non esiste una procedura con lo stesso nome e un numero di gruppo di 1 il database. È necessario eseguire CREATE PROCEDURE 'SecondTest'; 1 prima.

Riferimenti :

  1. CREA PROCEDURA con la sintassi per il numero
  2. Stored procedure numerate in SQL Server - techie-friendly.blogspot.com
  3. Raggruppamento di stored procedure - sqlmag

ATTENZIONE

  1. Dopo aver raggruppato le procedure, non è possibile lasciarle cadere singolarmente.
  2. Questa funzionalità potrebbe essere rimossa in una versione futura di Microsoft SQL Server.

0

Una procedura memorizzata è una raccolta denominata di istruzioni SQL e logica procedurale, ovvero compilata, verificata e archiviata nel database del server. Una procedura memorizzata viene in genere trattata come altri oggetti di database e controllata tramite il meccanismo di sicurezza del server.


0

In un DBMS, una procedura memorizzata è un insieme di istruzioni SQL con un nome assegnato che è memorizzato nel database in forma compilata in modo che possa essere condiviso da un numero di programmi.

L'uso di una procedura memorizzata può essere utile in

  1. Fornire un accesso controllato ai dati (gli utenti finali possono solo inserire o modificare i dati, ma non possono scrivere procedure)

  2. Garantire l'integrità dei dati (i dati verrebbero inseriti in modo coerente) e

  3. Migliora la produttività (le dichiarazioni di una procedura memorizzata devono essere scritte una sola volta)


0

per semplice,

Stored procedure sono programmi memorizzati , un programma / funzione memorizzato nel database.

Ogni programma memorizzato contiene un corpo costituito da un'istruzione SQL. Questa istruzione può essere un'istruzione composta composta da più istruzioni separate da punti e virgola (;).

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

0

Le stored procedure in SQL Server possono accettare parametri di input e restituire più valori di parametri di output; in SQL Server, le stored procedure programmano le istruzioni per eseguire operazioni nel database e restituire un valore di stato a una procedura o batch chiamante.

I vantaggi dell'utilizzo di stored procedure in SQL Server

Consentono la programmazione modulare. Consentono un'esecuzione più rapida. Possono ridurre il traffico di rete. Possono essere usati come meccanismo di sicurezza.

Ecco un esempio di una procedura memorizzata che accetta un parametro, esegue una query e restituisce un risultato. In particolare, la procedura memorizzata accetta BusinessEntityID come parametro e lo utilizza per abbinare la chiave primaria della tabella HumanResources.Employee per restituire il dipendente richiesto.

> 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

L'ho imparato da essential.com ... è molto utile.


0

La Stored Procedure ti aiuterà a creare codice nel server. Puoi passare parametri e trovare output.

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

0

Nelle procedure memorizzate le dichiarazioni sono scritte una sola volta e riducono il traffico di rete tra client e server. Possiamo anche evitare attacchi di iniezione di SQL.

  • Nel caso in cui si stia utilizzando un programma di terze parti nella propria applicazione per l'elaborazione dei pagamenti, qui il database dovrebbe esporre solo le informazioni necessarie e l'attività che questa terza parte è stata autorizzata, da questo possiamo ottenere la riservatezza dei dati impostando le autorizzazioni mediante Stored Procedures.
  • L'aggiornamento della tabella dovrebbe essere eseguito solo sulla tabella a cui è destinato, ma non dovrebbe aggiornare altre tabelle, grazie alle quali possiamo ottenere l'integrità dei dati utilizzando l'elaborazione delle transazioni e la gestione degli errori.
  • Se si desidera restituire uno o più articoli con un tipo di dati, è preferibile utilizzare un parametro di output.
  • In Stored Procedures, utilizziamo un parametro di output per tutto ciò che deve essere restituito. Se si desidera restituire un solo elemento con solo un tipo di dati intero, utilizzare meglio un valore di ritorno. In realtà il valore restituito è solo per informare l'esito positivo o negativo della Procedura memorizzata.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.