Anda di halaman 1dari 8

MATERI 9 – FUNCTION

PEMROGRAMAN BASIS DATA S1 TI


STEVI EMA WIJAYANTI
May 11, 2016 [PEMROGRAMAN BASIS DATA]

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

Format penulisan Function pada Transact SQL adalah sebagai berikut :


CREATE FUNCTION nama_function
( [ @parameter tipe_data [ ,...n ] ] )
RETURNS tipe_data_return
[ AS ]
BEGIN
statement
RETURN nilai_return
END

Untuk mengeksekusi User Define Function sama seperti mengakses Built in Function.

SELECT nama_function([@parameter tipe data,…])

STEVI EMA WIJAYANTI Page 2


May 11, 2016 [PEMROGRAMAN BASIS DATA]

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

Untuk menjalankan fungsi tersebut, query-nya adalah :


SELECT dbo.fcShowText()

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

Untuk menjalankan fungsi tersebut, query-nya adalah :


SELECT dbo.fcMostItem()

STEVI EMA WIJAYANTI Page 3


May 11, 2016 [PEMROGRAMAN BASIS DATA]

Hasilnya adalah :

2. Scalar Function dengan Parameter


Contoh :
Misal dibuat sebuah fungsi untuk menjumlahkan dua angka yang diinputkan dalam parameter,
maka fungsinya adalah :
CREATE FUNCTION fcTambah(@angka1 INT, @angka2 INT)
RETURNS INT AS
BEGIN
DECLARE @hasil INT
SELECT @hasil = @angka1 + @angka2
RETURN @hasil
END

Untuk menjalankannya :
SELECT dbo.fcTambah(20, 15)

Hasilnya adalah :

3. Scalar Function dengan Percabangan


Contoh :
Dibuat sebuah fungsi untuk menentukan nilai grade berdasarkan aturan/range yang telah
ditetapkan. Maka contoh fungsinya adalah sebagai berikut :
CREATE FUNCTION fcGrade(@nilai INT)
RETURNS CHAR(1) AS
BEGIN
DECLARE @grade CHAR(1)

IF (@nilai<=100 AND @nilai>80)


SET @grade = 'A'
ELSE IF (@nilai<=80 AND @nilai>60)
SET @grade = 'B'
ELSE IF (@nilai<=60 AND @nilai>40)
SET @grade = 'C'
ELSE IF (@nilai<=40 AND @nilai>20)
SET @grade = 'D'
ELSE
SET @grade = 'E'

RETURN @grade
END

Query untuk menjalankannya :


SELECT dbo.fcGrade(85)

STEVI EMA WIJAYANTI Page 4


May 11, 2016 [PEMROGRAMAN BASIS DATA]

Hasilnya adalah :

4. Scalar Function dengan Perulangan


Contoh :
CREATE FUNCTION fcFaktorial (@angka INT)
RETURNS INT AS
BEGIN
DECLARE @hasil INT
SET @hasil = 1
WHILE (@angka > 0)
BEGIN
SELECT @hasil = @hasil * @angka
SELECT @angka = @angka - 1
END
RETURN @hasil
END

Query untuk menjalankannya :


SELECT dbo.fcFaktorial(3)

Hasilnya adalah :

5. Scalar Function dengan Built in Function


Contoh 1 :
Dibuat fungsi untuk menentukan usia seseorang secara real time.
CREATE FUNCTION fcUsia(@tgl DATE)
RETURNS INT
AS
BEGIN
DECLARE @age INT
SET @age = DATEDIFF(YEAR, @tgl, GETDATE())
RETURN @age
END

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.

Query untuk menjalankannya :


SELECT dbo.fcUsia('10/05/1994')

STEVI EMA WIJAYANTI Page 5


May 11, 2016 [PEMROGRAMAN BASIS DATA]

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

SELECT @maks = MAX(RIGHT(supplier_id,6)) FROM Suppliers

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

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)

STEVI EMA WIJAYANTI Page 6


May 11, 2016 [PEMROGRAMAN BASIS DATA]

Query untuk menjalankannya :


SELECT *
FROM fcCustomerPerArea('WL001')

MULTI STATEMENT TABLE-VALUE FUNCTIONS

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

STEVI EMA WIJAYANTI Page 7


May 11, 2016 [PEMROGRAMAN BASIS DATA]

Jalankan kedua function tersebut !

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

1. Buat fungsi untuk membuat kode kategori otomatis.


2. Buat fungsi untuk membuat kode barang otomatis dengan ketentuan :
Format kode :
CG-001-IT000001
CG-001 adalah kode kategori barang yang akan diinputkan
- adalah pemisah antara kode kategori dengan kode barang yang baru.
IT000001 adalah urutan kode barang berdasarkan kode kategori
3. Buat fungsi untuk membuat kode transaksi otomatis, dengan ketentuan :
Format kode :
20160301-00001
20160301 adalah tanggal dimana transaksi penjualan/pembelian dilakukan
- adalah pemisah antara tanggal dengan kode penjualan
00001 adalah urutan kode berdasarkan tanggal pembelian/penjualan
4. Buat fungsi untuk menampilkan data barang yang memiliki stok kurang dari stok yang diinputkan
dalam parameter.
5. Buat fungsi untuk menampilkan berapa uang/pendapatan yang diterima dalam jangka waktu
tertentu.

STEVI EMA WIJAYANTI Page 8

Anda mungkin juga menyukai