SQL Server supporta diverse tipologie di funzioni, chiamate anche UDF (User Defined Functions). La più "semplice" delle funzioni di SQL Server è la funzione scalare. Ma che cosa significa "funzione scalare"?
Detto in parole povere, una funzione scalare è una funzione che restituisce sempre un singolo valore scalare. Quindi, comunque la scriviamo, ci restituirà sempre un solo valore. La funzione scalare può restituire qualsiasi tipo dato supportato da SQL Server (tranne BLOB, timestamp, cursor e table.)
Vediamo nel dettaglio come scrivere una funzione scalare con un semplice esempio...
Ipotizziamo di avere una tabella Vendite.DettaglioOrdini contenente record per gli ordini della nostra azienda. Per ogni record abbiamo i campi CodiceProdotto, NomeProdotto e Quantita. Vogliamo scrivere una semplice funzione che per ogni prodotto restituisca il totale delle quantità vendute. Ora, notiamo alcune caratteristiche della funzione scalare: - La funzione scalare ha (solitamente) uno o più parametri e restituisce un valore "scalare" tramite l'istruzione RETURNS nella sua definizione.
- Il "corpo" della funzione è racchiuso in un blocco "BEGIN....END"
- La funzione al suo interno ci restituisice un valore scalare con l'istruzione RETURN (non RETURNS, che invece va nella definizione della funzione stessa)
Esempio (funziona in SQL Server 2000, 2005 e 2008): CREATE FUNCTION Vendite.SommaVenduto (@CodProdotto int) RETURNS int AS BEGIN DECLARE @ret int --dichiariamo una variabile per il risultato SELECT @ret=sum(Quantita) --valorizziamo la variabile (un solo valore) FROM Vendite.DettaglioOrdini where CodiceProdotto =@CodProdotto if (@ret is null) set @ret=0 --la variabile è stata definita come int perciò dobbiamo prevedere --il caso in cui possa valere NULL e portarla a 0
RETURN @ret --restituiamo il risultato END Per "chiamare" la funzione la potremo eseguire ad esempio in una SELECT come nell'esempio seguente: SELECT CodiceProdotto, NomeProdotto, Vendite.SommaVenduto(CodiceProdotto) as Totale FROM Vendite.DettaglioOrdini
|