dalam contoh dibawah ini kasus tentang sistem informasi sekolah, yang mana function yang dibuat akan mengembalikan nilai berupa jumlah siswa dari setiap kelas.
sturuktur tabel siswa
CREATE TABLE `data_siswa`.`tbl_siswa` (
`nis` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
`kelas` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
function untuk mengembalikan jumlah data dari setiap kelas
DELIMITER $$
CREATE FUNCTION sf_tampil_siswa_kelas (p_kelas int) RETURNS INT DETERMINISTIC
BEGIN
DECLARE jml INT;
SELECT COUNT(*) AS jml_kelas INTO jml FROM tb_siswa WHERE kelas = p_kelas;
RETURN jml;
END$$
DELIMITER ;
penjelasannya sebagai berikut:
- 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.
contoh pemanggilannya seperiti dibawah ini:
select sf_tampil_siswa_kelas("2");
sebuah function hanya bisa memberikan return berupa nilai saja dan tidak bisa berupa resutlset
untuk penulisan DETEMINISTIC bisa ditulis secara implisit dengan memberikan setting global pada mysql dan secara default benilai NOT DETEMINISTIC , caranya dibawah ini:
SET GLOBAL log_bin_trust_function_creators = 1;
Sumber:dendieisme.blogspot.com