Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SQL Server
Stored Procedure
INTRODUZIONE
Le istruzioni SQL possono essere eseguite: -Singolarmente; -Come batch (gruppo di pi istruzioni sql); -Trigger; -Stored procedure.
SQL Server
Stored Procedure
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
-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
Invio al server
Stored Procedure
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
SQL Server
Stored Procedure
Stored Procedure
Stored Procedure
Esempio: Visualizzare i privilegi della tabella Stores del database Pubs tramite la stored procedure di catalogo sp_table_privilege.
SQL Server
Stored Procedure
SQL Server
Stored Procedure
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
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.
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.
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
SQL Server
Stored Procedure
SQL Server
Stored Procedure
Stored Procedure
Stored Procedure
Esempio: GruppoProc
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
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
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
SQL Server
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
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
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
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
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
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
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
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
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.
FINE