Membuat User Define Functions (UDFs) di mysql

UDF merupakan salah satu feature yang terdapat di mysql 5.0. Kehadirannya dapat meminimalisir proses transformasi data dari client ke server. User Define Functions ( UDFs ) adalah rutin – rutin yang independen untuk menjalankan tugas – tugas tertentu. UDFs serupa dengan procedure atau function yang umum dikenalkan pada banyak
bahasa pemrograman, dimana selain menjalankan serangkaian
proses, ia juga menerima parameter untuk input datanya, juga
dapat mengembalikan nilai sebagai hasil prosesnya.
Dalam mysql, function dibagi menjadi 3 bagian :

1. Scalar Valued Function (SVF)
Mengembalikan sebuah nilai, misal integer atau string
2. Table- Valued Function ( TVF )
Mengembalikan sebuah set baris – baris data.
3. Multi-statement Table Function.
Function ini mengembalikan variabel table yang strukturnya
dibuat secara manual, mirip dengan statement untuk membuat
table. Type fungsi ini digunakan untuk manipulasi data yang
kompleks didalam function seperti INSERT dan UPDATE.

Pada tabel dibawah ini :

Dibuat sebuah function untuk menentukan biaya kirim sesuai pembulatan. Jika berat dalam satuan gram beratnya lebih dari setengah, maka dibulatkan menjadi nilai diatasnya, namun jika dibawah setengah, maka dibulatkan menjadi dibawahnya berdasarkan parameter kota tujuan.

DELIMITER $$
CREATE FUNCTION ongkos_kirim (berat INT, kota INT)RETURNS INT DETERMINISTIC
BEGIN
     DECLARE biaya INT;
     SELECT (IF((LEFT((berat MOD 1000),1)>=5),CEIL(berat/1000),FLOOR(berat/1000) ) * ongkos) INTO biaya 
     FROM id_kota WHERE id=kota;
     RETURN biaya;  
END$$  
DELIMITER;

Penjelasan :
* DELIMITER adalah untuk memberi tahu kepada myql soal delimiter yang digunakan, secara default menggunakan ; jadi bila ada tanda ; mysql akan mengartikan akhir dari statement, pada contoh di atas delimeter yang digunakan $$ jadi akhir statementnya adalah $$
* CREATE FUNCTION adalah header untuk membuat function
* RETURNS adalah untuk menentukan tipe data yang di return-kan oleh function
* DETERMINISTIC/ NOT DETERMINISTIC adalah untuk menentukan yang bisa menggunakan function ini adalah user pembuatnya saja (determinisric) atau user siapa saja (not determinisric).
* BEGIN END adalah body dari function jadi semua SQL nya di tulis disini.
* FLOOR dan CEIL adalah function aritmatic untuk pembulatan keatas atau ke bawah.

Referensi : manual mysql

%d blogger menyukai ini: