FUNCTION
Function mirip seperti Procedure. Function memilii sejumlah parameter input dan hanya
mengembalikan satu output, standar perintah yang digunakan menggunakan perintah standar SQL.
Dalam SQL Server terdapat dua jenis fungsi yaitu :
1. Built In Function
Built In Function adalah fungsi yang telah disiapkan oleh SQL untuk membantu user dalam
melakukan manajemen database. Untuk menggunakan fungsi tersebut, user hanya tinggal
memanggil fungsi tersebut.
Contoh dari Built in Functions antara lain :
AVG(), SUM(), POWER(), SQRT(), GETDATE(), UPPER(), TRIM() dan lain sebagainya
2. User Define Function
User Define Function adalah fungsi yang tidak disediakan oleh SQL, namun dideklarasikan
sendiri oleh user sesuai dengan kebutuhan masing-masing. Terdapat 3 jenis User Define
Function yang dapat diimplementasikan dalam SQL, antara lain :
a. Scalar Functions
Scalar Function adalah sebuah fungsi yang mungkin memiliki parameter dan mungkin
tidak, namun hanya memiliki 1 nilai kembalian (return value). Nilai kembalian dapat
bertipe apa saja kecuali text, ntext, image, cursor, dan timestamp.
b. Inline Table-Value Functions
c. Multi-Statement Table-Value Functions
Untuk mengeksekusi User Define Function sama seperti mengakses Built in Function.
SCALAR FUNCTION
Seperti yang telah disampaikan berkaitan dengan Scalar Function bahwa fungsi ini mungkin memiliki
parameter dan mungkin tidak, namun hanya memiliki 1 nilai kembalian (return value).
Berikut ini adalah beberapa contoh dari Scalar Function :
1. Scalar Function tanpa Parameter
Contoh 1 :
Misalkan dibuat sebuah fungsi untuk menampilkan text ‘Pemrograman Basis Data’
CREATE FUNCTION fcShowText()
RETURNS VARCHAR(35)
AS
BEGIN
DECLARE @text VARCHAR(35)
SET @text = 'Pemrograman Basis Data'
RETURN @text
END
Hasilnya :
Contoh 2 :
Misalkan dibuat sebuah fungsi untuk menampilkan nama barang yang paling banyak dibeli oleh
konsumen.
CREATE FUNCTION fcMostItem()
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @name VARCHAR(50)
SELECT TOP 1 @name = i.name
FROM Purchase_Items p JOIN Items i ON p.item_id = i.item_id
GROUP BY i.name
ORDER BY COUNT(p.item_id) DESC
RETURN @name
END
Hasilnya adalah :
Untuk menjalankannya :
SELECT dbo.fcTambah(20, 15)
Hasilnya adalah :
RETURN @grade
END
Hasilnya adalah :
Hasilnya adalah :
Keterangan :
Fungsi DATEDIFF digunakan untuk mengembalikan nilai dari batasan tanggal dan waktu
diantara 2 tanggal. DATEDIFF (datepart, startdate, enddate).
Fungsi GETDATE digunakan untuk mengembalikan tanggal sekarang dari server dimana SQL
terinstall.
Hasilnya :
Contoh 2 :
Misalkan dibuat fungsi untuk membuat kode otomatis untuk tabel supplier, maka query-nya
yaitu :
CREATE FUNCTION fcKodeSupplier()
RETURNS CHAR(10) AS
BEGIN
DECLARE
@kodeBaru CHAR(10),
@maks INT
IF @maks IS NULL
SET @kodeBaru = 'SUP-000001'
ELSE
SET @kodeBaru = 'SUP-' + RIGHT('000000' + CAST(@maks + 1 AS CHAR(6)),10)
RETURN @kodeBaru
END
Untuk menjalankannya :
SELECT dbo.fckodeSupplier()
Hasilnya :
Inline Table-Value Functions adalah sebuah fungsi yang memiliki nilai kembalian berupa tabel. Hal ini
digunakan apabila user ingin menampilkan output lebih dari 1 data, karena dalam Scalar Functions
tidak diijinkan memiliki nilai kembalian berupa Cursor.
Contoh :
Dibuat fungsi untuk menampilkan data Konsumen per area.
CREATE FUNCTION fcCustomerPerArea(@area VARCHAR(5))
RETURNS TABLE
AS
RETURN (SELECT customer_id, name, address, region_id
FROM Customers
WHERE region_id = @area)
Multi Statement Table-Value Functions sangat mirip dengan Inline Table-Value Functions dengan
sedikit perbedaan.
Contoh :
Dalam database RetailDbXXXX terdapat 1 tabel yaitu Supplier, contoh data dari tabel tersebut
adalah sebagai berikut :
Misalkan data yang ditampilkan hanya 3 kolom saja, seperti contoh berikut :
Jika menggunakan Inline Table-Value Functions maka contoh deklarasi fungsinya adalah sebagai
berikut :
CREATE FUNCTION fc_ILTVF_GetSupplier()
RETURNS TABLE
AS
RETURN (SELECT supplier_id, name, address
FROM Suppliers)
Untuk Multi Statement Table-Value Functions maka contoh deklarasi fungsinya adalah :
CREATE FUNCTION fc_MSTVF_GetSupplier()
RETURNS @table TABLE (kode CHAR(10), nama VARCHAR(30), alamat VARCHAR(15))
AS
BEGIN
INSERT INTO @table
SELECT supplier_id, name, address
FROM Suppliers
RETURN
END
Perbedaan Inline Value-Table Functions (ILVTF) dengan Multi Statement Table-Value Functions
(MSTVF) :
1. Dalam ILVTF, nilai kembalian tidak dapat mengandung struktur dari tabel. Dimana MSTVF
dapat mengembalikan struktur tabel secara spesifik.
2. Dalam ILVTF tidak bisa terdapat blok BEGIN dan END, dimana MSTVF memilikinya.
3. ILVTF memiliki performa terbaik dibandingkan MSTVF.
4. ILVTF menampilkan data yang langsung diambil dari tabel/sumber yang telah tersedia. Jika
MSVTF mengambil data dari tabel yang diciptakan pada saat fungsi tersebut dibuat.
TASK