SubTopik • System Functions • User Defined Function (UDF) • Scalar • Inline table-valued functions • Multi-statement table-valued functions Function • Menyimpan perintah yang sering dipakai • Mengembalikan nilai • Bisa berparameter maupun tanpa parameter • Menyederhanakan query • Dipanggil dengan menggunakan perintah SELECT System Functions • Fungsi yang sudah tersedia pada SQL Server • Jenis-jenis system functions • Fungsi String • Len(string), Lower(string), Upper(string), Left(string, value), Right(string, value), Substring(string,start,length) • Fungsi Aritmatika • Abs(value), Log10(value), Square(value), Sqrt(value), Floor(value), Round(value, length) • Fungsi Datetime • Getdate(), Day(date), Month(date), Year(date), Dateadd (interval, value, datetime), Datediff (interval, startdatetime, enddatetime) • Fungsi Agregat • Sum(field), Count(field), Min(field), Max(field) Syntax • CREATE/ALTER FUNCTION [schema_name.]function_name (@parameter1 type ( length ) [ , @parameter2 type ( length ), … ]) RETURNS type [WITH ENCRYPTION | SCHEMABINDING] AS BEGIN < SQL statement > RETURN expression END
• DROP FUNCTION [schema_name.]function_name
UDF-Scalar • Perintah yang dibuat sendiri oleh DBA baik berparameter maupun tanpa parameter yang selalu mengembalikan suatu nilai (scalar) • Nilai yang dikembalikan dapat berupa tipe data char, date, datetime, float, int, text, decimal, dsb UDF-Scalar CREATE FUNCTION dbo.CurrentYear() RETURNS INT AS RETURN year(GetDate())
SELECT dbo.CurrentYear()
SELECT product_name, model_year,
dbo.CurrentYear() - model_year [Range Year] FROM production.products UDF-Scalar CREATE FUNCTION dbo.CekValid (@nmkolom varchar(50)) RETURNS tinyint SELECT dbo.CekValid(‘’) AS SELECT dbo.CekValid(‘Hay’) BEGIN DECLARE @valid tinyint IF @nmkolom = '' SELECT dbo.CekValid(NULL) SET @valid=0 ELSE SET @valid=1 RETURN @valid END Inline table-valued functions • Mengembalikan nilai dalam bentuk tabel • Isi dari function / body function hanya RETURN CREATE FUNCTION SoldProductbyStaff(@idstaff int) RETURNS table AS RETURN ( SELECT st.first_name + st.last_name SalesName , pr.product_name, oi.quantity FROM sales.orders od JOIN sales.order_items oi ON od.order_id = oi.order_id JOIN sales.staffs st ON od.staff_id=st.staff_id JOIN production.products pr ON oi.product_id=pr.product_id WHERE st.staff_id=@idstaff ) SELECT * FROM SoldProductbyStaff(2) Multi-statement table-valued functions • Mengembalikan nilai dalam bentuk tabel • Mendeklarasikan struktur tabel yang di return Multi-statement table-valued functions CREATE FUNCTION SoldProductbyStaff(@idstaff int) RETURNS @table TABLE (SalesName varchar(100), ProductName varchar(100), Qty int) AS BEGIN INSERT INTO @table SELECT st.first_name + st.last_name SalesName , pr.product_name, oi.quantity FROM sales.orders od JOIN sales.order_items oi ON od.order_id = oi.order_id JOIN sales.staffs st ON od.staff_id=st.staff_id JOIN production.products pr ON oi.product_id=pr.product_id WHERE st.staff_id=@idstaff RETURN END
SELECT * FROM SoldProductbyStaff(2)
Function with Encryption • Disisipkan diantara RETURNS dan AS dengan menambahkan kata WITH ENCRYPTION • Berfungsi untuk menyembunyikan perintah function Function with Schemabinding • Disisipkan diantara RETURNS dan AS dengan menambahkan kata WITH SCHEMABINDING • Berfungsi sebagai CONSTRAINT pada tabel yang terkait pada fungsi sehingga tabel tidak dapat dihapus