Università di Modena e Reggio Emilia Basi di dati (7) Docente: andrea.bulgarelli@gmail.com Argomento: stored procedure (1.0) 1
Panoramica Stored procedure Creazione Chiamata Modifica Eliminazione Esempio clienti/ordini 2
Stored Procedures In SQL server l utente può definire stored procedures e funzioni, che sono globalmente riferite come routines Lo standard SQL non considera allo stesso modo i trigger, che quindi verranno trattati a parte D ora in avanti scriveremo SP per Stored Procedure 3
Creazione di una SP Definizione della SP USE pubs GO CREATE PROC get_author @au_id varchar(11) AS SELECT au_lname, au_fname FROM authors WHERE au_id=@au_id GO Uso della SP EXEC get_author @au_id='172-32-1176' EXEC get_author '172-32-1176' 4
Forma generale CREATE [PROCEDURE] procedure_name [;number] [ {@parameter data_type} [= default] [OUTPUT] ] [,...n] [WITH { RECOMPILE ENCRYPTION RECOMPILE, ENCRYPTION } ] [FOR REPLICATION] AS sql_statement [...n] 5
Definizione [;number] è un numero che può essere utilizzato per raggruppare le SP in gruppi (con lo stesso nome e numero diverso) per farne un DROP comune @parameter è il nome di un parametro con tipo assegnato (e possibile valore di default) [OUTPUT] indica che il parametro è un valore di output della SP Fino a 1024 parametri possono essere specificati [WITH RECOMPILE] implica che il piano di esecuzione della SP non sarà inserito nella cache del DBMS [WITH ENCRYPTION] richiede la cifratura della descrizione della SP 6
Chiamata CREATE PROC sp_nome @var1 int, @var2 int output AS set @var2 = @var1 GO DECLARE @batchvar1 int EXEC sp_nome 10, @batchvar1 output PRINT @batchvar1 7
8
Dove trovare altri esempi? Andare in un DB (use DB) ed usare la SP sp_helptext Esempio: USE master sp_helptext sp_helptext (per scoprire come è fatta la stessa SP helptext, vedere quali parametri può prendere) 9
Ciclo di vita All atto della prima esecuzione di una nuova SP questa viene compilata in un formato interno eseguibile secondo un piano di esecuzione determinato dalla struttura del DB, dall obiettivo della SP, etc Il compilato viene conservato in una cache di sistema per successivi riusi se alla chiamata le condizioni (struttura, contenuti, codici) non sono cambiate Se il DB cambia in qualche modo, allora le SP vengono marcate per essere ri-compilate alla prima richiesta di esecuzione 10
Modifica E disponibile il comando ALTER PROC per modificare una SP ALTER PROC[EDURE] procedure_name [;number] [ {@parameter data_type } [VARYING] [= default] [OUTPUT] ] [,...n] [WITH { RECOMPILE ENCRYPTION RECOMPILE, ENCRYPTION } ] [FOR REPLICATION] AS sql_statement [...n] Il motivo d uso principale per questo comando (piuttosto che DROP e poi CREATE) è che modificando con esso la SP non si modificano gli identificativi della SP in quanto oggetto del DB e tutti i riferimenti rimangono intatti 11
Eliminazione Sintassi DROP PROCEDURE nome_proc [, ] 12
SP di sistema Le SP erano un tempo molto usate per l amministrazione del sistema; oggi le interfacce grafiche hanno in buona misura superato questa esigenza Le SP di sistema rimangono invece disponibili per gli interventi sul sistema da parte dei programmi (SP) utente Queste routine sono visibili nel database master, ed è possibile vederne il codice sorgente con sp_helptext Alcune di queste routine non sono documentate ufficialmente, nel qual caso il produttore si riserva il diritto di modificarle in modo incompatibile in release successive del sistema 13
Categorie sp di sistema SP generali di sistema (amministrazione, informazione) sp_helptext, sp_helptrigger, sp_attach_db, sp_lock, sp_help, sp_helpconstraint, sp_recompile, sp_helpindex, sp_who SP di catalogo (elencazione ed esplorazione oggetti) sp_databases, sp_tables, sp_columns, sp_stored_procedures SP di replica Gestione delle repliche dei DB (usate da Enterprise Manager) SP estese SP scritte in linguaggi esterni (e.g. C o C++) ed integrate come parti di SQL server 14
Esempio clienti/ordini 15
16
17
18