Sei sulla pagina 1di 50

Stored Procedure in ambiente SQL Server

SQL Server

Giorgio Romeo MCP MCSD

Stored Procedure

INTRODUZIONE

Le istruzioni SQL possono essere eseguite: -Singolarmente; -Come batch (gruppo di pi istruzioni sql); -Trigger; -Stored procedure.
SQL Server

Stored Procedure

Istruzioni SQl singole


Il server analizza listruzione, ad esempio una SELECT, per determinare il modo pi efficiente per estrarre i dati richiesti. Questo processo chiamato ottimizzazione e consiste nel determinare quale sia, tra i diversi piani di esecuzione esistenti, quello pi efficiente. La versione finale ottimizzata della serie di passaggi, che restituiscono il risultato dellistruzione in modo ottimale, chiamata piano di esecuzione. Ad ogni esecuzione, il server elabora nuovi piani di esecuzione, in funzione dello stato corrente del sistema.
SQL Server

Stored Procedure

Batch
Un batch un gruppo di istruzioni, inviate in una singola unit e contemporaneamente al server per lesecuzione; Tutte le istruzioni del batch sono elaborate in un piano di esecuzione; Le istruzioni del piano di esecuzione sono eseguite singolarmente. Ne deriva che: -Un errore di sintassi impedisce la creazione del piano di esecuzione e lesecuzione del batch; -Un errore in fase di esecuzione ( ad esempio un overflow o una violazione di vincolo) comporta linterruzione dellistruzione corrente e di quelle successive.
SQL Server

Stored Procedure

Trigger
Un trigger un tipo speciale di stored procedure, che un utente non chiama direttamente. Quando si crea un trigger, esso viene definito per essere eseguito quando si apporta un tipo specifico di modifica dei dati di una tabella o ad una colonna specifica. I trigger vengono attivati automaticamente dagli eventi INSERT, UPDATE e DELETE che hanno luogo in una tabella o in una vista.
SQL Server

Stored Procedure

SQL SERVER

Stored Procedure

Gli script in linguaggio SQL possono essere: -Salvati, nel file system sotto forma di file con estensione .sql -Salvati sotto forma di stored procedure

Le stored procedure offrono:

-Archiviazione locale; -Precompilazione del codice; -Inserimento nella cache -Modularit e riutilizzo del codice -Parametri in ingresso ed uscita -Codici di stato -Possibilit di richiamare altre procedure -Funzioni di protezione: -Crittografia -Limiti sui privilegi
SQL Server

Stored Procedure

Comando SQL o batch di comandi

Invio al server

Verifica delle autorizzazioni e della sintassi dei comandi

Creazione di un piano di esecuzione per lelaborazione del comando


SQL Server

Stored Procedure

Comando SQL o batch di comandi

Ad ogni esecuzione viene creato un nuovo piano di esecuzione

Lo script pu essere richiamato da numerosi comandi in rete, generando maggiore traffico


SQL Server

Stored Procedure

Stored Procedure
Viene controllata la sintassi e, se non vi sono errori, il nome della procedura memorizzato nella tabella SysObjects ed il testo nella tabella SysComments del database corrente

Alla prima esecuzione, viene creato un piano di esecuzione e la procedura viene compilata

quindi
SQL Server

Stored Procedure

Stored Procedure
Ad ogni esecuzione della SP, il server non controlla n la sintassi ne il piano di esecuzione, poich questultimo memorizzato nella cache

Lesecuzione di una complessa SP richiede un singolo comando

SQL Server

Stored Procedure

Categorie di Stored Procedure


Esistono cinque classi di stored procedure:

-Di sistema -Locali -Temporanee -Estese -Remote - CLR


SQL Server

Stored Procedure

Stored procedure di sistema


Sono memorizzate nel database Master ed in genere sono denominate con un prefisso sp_. Eseguono unampia variet di attivit che supportano le funzioni di SQL Server, come lamministrazione del database. Una attivit di amministrazione di database comune consiste nella visualizzazione di informazioni relative ai processi ed agli utenti correnti del database.
SQL Server

Stored Procedure

Esempio: Visualizzare i privilegi della tabella Stores del database Pubs tramite la stored procedure di catalogo sp_table_privilege.

Use Pubs GO EXECUTE sp_tabel_privileges Stores

SQL Server

Stored Procedure

Stored procedure locali


Sono generalmente memorizzate in un database dellutente e progettate per completare le attivit nel database in cui risiedono. possibile creare una sp locale anche per personalizzare il codice di una sp di sistema, copiando e modificando localmente il contenuto di una sp di sistema.

SQL Server

Stored Procedure

Stored procedure temporanee


Una sp temporanea simile ad una sp di locale, ma presente solo fino a che la connessione non viene chiusa o SQL Server non viene arrestato; dopo viene eliminata. Queste SP sono memorizzate nel database TempDB, il quale viene ricreato al riavvio del server. Ogni oggetto presente in TempDB scompare al momento dellarresto del server.

SQL Server

Stored Procedure

Stored procedure temporanee Esistono tre tipi di sp temporanee: -Locali (o private), il cui ambito di esecuzione legato alla connessione creata; inizia con il simbolo #. -Globali, iniziano con il simbolo ## -Create direttamente in TempDB
SQL Server

Stored Procedure

Stored procedure estese

SQL Server

Stored Procedure

Una stored procedure estesa utilizza un programma esterno, compilato come una DLL per espandere le funzionalit della sp; la maggior parte delle sp estese utilizza un prefisso xp_ come convenzione di denominazione.

Risoluzione dei nomi posticipata possibile creare stored procedure prima degli oggetti a cui esse fanno riferimento, poich SQL Server non verifica lesistenza di tutti gli oggetti. La verifica eseguita al momento dellesecuzione della sp.

SQL Server

Stored Procedure

SQL Server

Stored Procedure

Quando si fa riferimento ad un oggetto, come una tabella, in una stored procedure, bene specificare il proprietario delloggetto. Per impostazione predefinita, SQL Server presume che lautore della sp sia anche il proprietario degli oggetti a cui viene fatto riferimento. Per evitare confusione, specificare dbo come proprietario al momento della creazione di tutti gli oggetti, sia per la sp che per tutti gli altri oggetti a cui si fa riferimento.

Istruzione CREATE PROCEDURE


Listruzione permette di eseguire le seguenti attivit:

SQL Server

Stored Procedure

- Definire parametri di input e di output, i relativi tipi di dati ed i valori predefiniti; - Utilizzare i codici restituiti per visualizzare informazioni sullesito positivo o negativo di una attivit; - Controllare se un piano di esecuzione deve essere deve essere inserito nella cache; - Crittografare il contenuto della sp, a scopo di protezione; - Specificare le azioni che la sp deve effettuare quando viene eseguita; - ed altre.

Contesto di una stored procedure

Ad eccezione delle sp temporanee (che sono create in TempDB), una stored procedure sempre creata nel database corrente. Pertanto, prima di creare una sp, occorre sempre specificare il database corrente, tramite istruzione USE, seguita dal comando di batch GO.
SQL Server

Stored Procedure

Esempio: il seguente script seleziona il database Pubs nel primo batch e quindi crea una procedura, denominata ListAuthorNames, il cui proprietario dbo.

Use Pubs GO CREATE PROCEDURE [dbo].[ListAuthName] AS SELECT [fname], [lname] FROM [Pubs]. [dbo].[authors]

SQL Server

Stored Procedure

Creazione di stored procedure temporanee Il simbolo di cancelletto # indica a SQL Server di creare la procedura temporanea locale; per una procedura temporanea globale, aggiungere ##. Durante la creazione di una sp temporanea, SQL Server ignora il database locale. Per definizione, una sp temporanea esiste solo in TempDB. Pre creare una sp temporanea, che non sia locale o globale, direattamente in TempDB, rendere TempDB il database corrente e creare li la procedura.

SQL Server

Stored Procedure

Esempio: stored procedure temporanea locale

CREATE PROCEDURE # AS SELECT * FROM [pubs].[dbo].[authors] GO

SQL Server

Stored Procedure

Esempio: stored procedure temporanea globale

CREATE PROCEDURE ## AS SELECT * FROM [pubs].[dbo].[authors] GO

SQL Server

Stored Procedure

Esempio: stored procedure direttamente in TempDB

USE TEMP DB GO CREATE PROCEDURE ## AS SELECT * FROM [pubs].[dbo].[authors] GO


SQL Server

Stored Procedure

Raggruppamento di stored procedure


possibile collegare logicamente le sp raggruppandole al momento della creazione. Questa tecnica utile per le sp da amministrare come una singola unit e che sono utilizzate in una singola applicazione. Assegnare a ciascuna procedura lo stesso nome quindi digitare un punto e virgola ed un numero univoco. Al momento della creazione, le sp sono raggruppate logicamente e, invocando il codice della sp principale, possibile vedere il codice di tutte le sp collegate.
SQL Server

Stored Procedure

Esempio: GruppoProc

GruppoProc;1 GruppoProc;2 GruppoProc;3

Piano di esecuzione, cache e prestazioni

Per impostazione predefinita, il piano di esecuzione di una sp viene inserito nella cache al momento della prima esecuzione e non viene nuovamente inserito fino al successivo riavvio del server o se le tabelle utilizzate dalla sp non subiscono variazioni.
SQL Server

Stored Procedure

Piano di esecuzione, cache e prestazioni Per esigenze di prestazioni, non opportuno inserire nella cache un piano di esecuzione per una sp ( ad esempio quando i parametri di una sp variano considerevolmente da una esecuzione allaltra). Affinch una sp sia ricompilata ad ogni esecuzione , aggiungere la parola chiave WITH RECOMPILE al momento della creazione.
SQL Server

Stored Procedure

Specifica dei parametri e dei relativi valori

Se una sp richiede valori di parametro, occorre specificarli al momento dellesecuzione della procedura. Quando sono definiti parametri di input e di output, essi sono preceduti dal simbolo @, seguito dal nome del parametro e dallindicazione del tipo di dati.
SQL Server

Stored Procedure

Specifica dei parametri e dei relativi valori

SQL Server

Al momento dellesecuzione, occorre includere un valore per il parametro e, facoltativamente, il nome del parametro. Se i valori sono specificati senza i corrispondenti nomi, occorre chiamare i valori nello stesso ordine in cui sono stati specificati al momento della creazione della procedura.

Stored Procedure

Specifica dei parametri e dei relativi valori


Esempio: procedura con valori di parametro

USE Pubs GO EXECUTE au_info Green, Majorie

Esempio: procedura con nomi e valori di parametro

SQL Server

USE Pubs GO EXECUTE au_info @lastname = Green , @firstname = Majorie

Stored Procedure

Parametri e variabili
I parametri di Input consentono di passare valori alla sp, rendendo unico il set di risultati per la richiesta. I parametri di output estendono loutput della sp oltre i set di risultati standard restituiti da una query. I dati derivati da un parametro di output sono acquisiti in memoria al momento della esecuzione della sp.

SQL Server

Stored Procedure

Parametri e variabili Per restituire un valore da un parametro di output, occorre creare una variabile che contenga il valore stesso. possibile visualizzare il valore mediante i comandi SELECT o PRINT, oppure utilizzare il valor per completare gli altri comandi nella procedura.

SQL Server

Stored Procedure

Parametri e variabili
I parametri definiscono tipi di dati e comprendono la parola chiave obbligatoria OUTPUT. Dopo la definizione, listruzione SELECT li utilizza. Innanzi tutto i parametri di output sono impostati come nome di colonna nella query. Quando la query viene eseguita, i parametri di output contengono i valori di queste colonne. La clausola WHERE dellistruzione SELECT contiene il parametro di input.
SQL Server

Stored Procedure

ESEMPIO: definizione di una SP con parametri di input e di output

USE nome_database GO CREATE PROCEDURE dbo.nome_sp @Var1 varchar(80), @Var2 int OUTPUT, @Var3 varchar(80) OUTPUT AS SELECT @Var2 = nome_campo1_tab, @Var3 = nome_campo2_tab
SQL Server

Stored Procedure

FROM nome_tabella WHERE nome_campo2_tab LIKE @Var1

ESEMPIO: esecuzione di una sp con parametri

DECLARE @nome_var_loc1 int, @nome_var_loc2 varchar(80) EXECUTE dbo.nome_sp @Var2 = @nome_var_loc1 int, @Var3 = @nome_var_loc2, @Var1 = ______ SELECT Campo_1 = @nome_var_loc1 , Campo_2 = @nome_var_loc2 GO
ATTENZIONE: lesecuzione di questa procedura restituisce una sola riga di dati, perch il set di risultati restituito dallistruzione SELECT viene trasmesso ad una variabile in grado di gestire solo un valore singolo.

SQL Server

Stored Procedure

Istruzione RETURN e gestione degli errori Gli errori che si verificano al momento dellesecuzione di una sp sono gestiti mediante i codici restituiti e tramite la funzione @@ERROR. Listruzione RETURN consente di generare codici restituiti e terminare un batch; inoltre fornisce i valori integer ad un programma chiamante. Listruzione RETURN utilizzata principalmente per la gestione degli errori poich, quando eseguita, la sp si interrompe incondizionatamente.
SQL Server

Stored Procedure

ESEMPIO: procedura con codice restituito

CREATE PROCEDURE dbo.SalesForTitle @Title varchar(80), @YtdSales int OUTPUT, @TitleText varchar(80) OUTPUT AS IF (SELECT COUNT(*) FROM Titles WHERE title LIKE @Title) = 0 RETURN (1) ELSE SELECT @YtdSales = ytd_sales, @TitleText = title FROM titles WHERE title LIKE @Title
SQL Server

Stored Procedure

DECLARE @y_Ytdsales int, @t_TitleText varchar(80), @r_Code int EXECUTE @r_Code = SalesForTitle @Ytdsales = @y_Ytdsales OUTPUT, @TitleText = @t_TitleText OUTPUT, @Title = Garlic% IF @r_Code = 0 SELECT Title = @t_TitleText , Number of sales = @y_Ytdsales, Return Code = @r_Code ELSE IF @r_Code = 1 PRINT Nessuna corrispondenza. Codice Restituito= + CONVERT(varchar(1), @r_Code )
SQL Server

Stored Procedure

GO

Uso dei cursori per il recupero dei dati

Un cursore una entit che esegue il mapping su un set di risultati e stabilisce una posizione su una singola riga allinterno del set. Dopo avere posizionato il cursore su una riga, possibile eseguire operazioni sulla quella riga o su un blocco di righe a partire da quella posizione.
SQL Server

Stored Procedure

Uso dei cursori per il recupero dei dati

Nelle sp possibile utilizzare i cursori, anche se preferibile evitarli se esiste un metodo per effettuare la medesima operazione tramite set di dati. Le procedure che utilizzano set di dati sono pi efficienti sul database e sulla rete e sono, in genere, meno complesse da scrivere rispetto ai cursori.
SQL Server

Stored Procedure

Metodi per il recupero dei dati (1)


Eliminare i parametri di output dallistruzione SELECT:

USE nome_database GO CREATE PROCEDURE dbo.nome_sp @Var1 varchar(80), @Var2 int OUTPUT, @Var3 varchar(80) OUTPUT AS SELECT nome_campo1= nome_campo1_tab, nome_campo2 = nome_campo2_tab FROM nome_tabella WHERE nome_campo2_tab LIKE @Var1
SQL Server

Stored Procedure

EXECUTE dbo.nome_sp @Var1 = ____

Metodi per il recupero dei dati (2)


Uso dei cursori: CREAZIONE

CREATE PROCEDURE dbo.SalesForTitle @ResultCrsr CURSOR VARYING OUTPUT, @Title varchar(80) = NULL AS SET @ResultCrsr = CURSOR FOR SELECT ytd_sales, title FROM dbo.title WHERE title LIKE @Title OPEN @ResultCrsr
SQL Server

GO

Stored Procedure

Metodi per il recupero dei dati (2)


Uso dei cursori: RECUPERO

SQL Server

Stored Procedure

DECLARE @r_ResultCrsr CURSOR EXECUTE dbo.SalesForTitle @ResultCrsr = @r_ResultCrsr OUTPUT, @Title = %The FETCH NEXT FROM @r_ResultCrsr WHILE (@@FETCH_STATUS <> -1) BEGIN FETCH NEXT FROM @r_ResultCrsr END CLOSE @r_ResultCrsr DEALLOCATE @r_ResultCrsr GO

Buon Lavoro

SQL Server

Stored Procedure

A mio modesto parere, che peraltro condivido le cose sono sempre pi complesse di come appaiono.

quindi, se qualcosa appare semplice, si trascurato qualche dettaglio importante.

FINE