Pages

Sabtu, 02 Maret 2013

FUNCTION

FUNCTION adalah salah satu feature yang terdapat di mysql 5.0 sedang-kan Function adalah kumpulan-kumpulan SQL berupa rountine yang di simpan dalam database MySQL Server. biasanya function ini dikombinasikan dengan store pocedure atau bisa juga tidak di kombinasikan dengan store procedure
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;

kelebihan dari mySQL adalah selain mempunyai fungsi – fungsi yang telah disediakan olehnya kita juga bisa menambahkan fungsi tersebut kedalam database.
Fungsi tersebut bisa digunakan selama masih dipanggil dan mengisikan parameter(jika menggunakanya) jika memberikan nilai balik(return) namun jika membuat fungsi yang tidak mengembalikan nilai dan tidak memerlukan parameter maka tidak perlu ditulisakan pun tidak menjadi masalah.
Berikut contoh cara pembuatan function pada mySQL

mysql> CREATE FUNCTION penjumlahan (a integer,b integer) RETURNS INTEGER RETURN (a - b);

cara memanggilnya

mysql> SELECT penjumlahan(2,1)

Selain itu fungsi ini bisa digabungkan dengan fungsi – fungsi lain yang telah disediakan oleh mySQL berikut contoh fungsi untuk menghitung umur

mysql> CREATE FUNCTION age (_d DATETIME) RETURNS INTEGER 
COMMENT 'Given birthdate, returns current age' 
RETURN YEAR(NOW()) - YEAR(_d) - IF(DATE_FORMAT(_d, '%c%d') > 
DATE_FORMAT(NOW(), '%c%d'), 1, 0);

Cara memanggilnya

mysql> SELECT age('1987-09-21')

dengan begini kita tidak perlu membuat fungsi lagi di program karna sudah langsung didapatkan nilainya dari query yang kita buat.
Selanjutnya contoh Function yang mengambil sebuah parameter, melakukan operasi dengan menggunakan Function SQL, dan me-return result:

mysql> delimiter //
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT(‘Hello, ‘,s,’!’);
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> SELECT hello(‘world’);
+----------------+
| hello(‘world’) |
+----------------+
| Hello, world! |
+----------------+
1 row in set (0.00 sec)

2.1.15. CREATE PROCEDURE and CREATE FUNCTION Syntax

CREATE
     [DEFINER = { user | CURRENT_USER }]
     PROCEDURE sp_name ([proc_parameter[,...]])
     [characteristic ...] routine_body
CREATE
     [DEFINER = { user | CURRENT_USER }]
     FUNCTION sp_name ([func_parameter[,...]])
     RETURNS type
     [characteristic ...] routine_body
proc_parameter:
     [ IN | OUT | INOUT ] param_name type
func_parameter:
     param_name type
type:
     Any valid MySQL data type
characteristic:
  LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'
routine_body:
  Valid SQL procedure statement

Tidak ada komentar:

 

Your Message Please



Cari Blog Ini