February 5, 2012

Mempelajari Mysql Store Function

mysql store function
MySQL memiliki dua obyek yang sangat berguna yang biasa disebut Routine, yaitu stored function (fungsi tersimpan) dan stored procedure (prosedur tersimpan). Dengan obyek ini kita dapat meringkas beberapa perintah SQL menjadi sebuah perintah. Fasilitas Routine hanya ditemui pada MySQL versi 5 keatas.

Alasan perlunya penggunaan Routine adalah :

1. Mempermudah penggunaan

Dengan meringkas beberapa perintah SQL akan mempermudah pekerjaan terutama jika server MySQL dijalankan oleh beberapa User dan mungkin tidak semua user tersebut dapat menggunakan perintah SQL secara lancar sehingga User tersebut dapat bekerja dengan fungsi tersimpan dan prosedur tersimpan tanpa harus mengetahui perintah yang ada didalamnya.

2. Keamanan

Dengan meringkas beberapa perintah SQL, kita telah menyembunyikan semua perintah SQL yang ada didalamnya. Dengan cara ini kita dapat memperkecil pemberian hak akses kepada masing-masing user, hanya perlu memberikan hak untuk mengeksekusi fungsi tersimpan atau prosedur tersimpan tanpa harus memberikan hak untuk memanipulasi tabel aslinya.

Sebelum membuat sebuah obyek prosedur tersimpan dan fungsi tersimpan, harus dipastikan User mempunyai hak-hak berikut :
- CREATE ROUTINES

Hak yang diperlukan untuk membuat sebuah obyek fungsi tersimpan dan prosedur tersimpan.

-  ALTER ROUTINES

Hak yang diperlukan untuk menghapus atau mengubah isi dari sebuah objek prosedur tersimpan dan fungsi tersimpan.
-  EXECUTE

Hak yang digunakan untuk mengeksekusi obyek prosedur tersimpan dan fungsi tersimpan.
- FUNGSI TERSIMPAN (STORED FUNCTION)

Untuk membuat sebuah obyek fungsi tersimpan menggunakan perintah
- CREATE FUNCTION :

CREATE FUNCTION nama_fungsi ([parameter[,…]]) RETURNS tipe_hasil_kembalian
n RETURN isi_fungsi

Fungsi tersimpan akan mengembalikan hasil proses dari isi fungsi tersimpan.
Contoh :

mysql > CREATE FUNCTION fungsi1 (a SMALLINT)

         -> RETURNS INT
         -> RETURN a+a; Query OK, 0 rows affected (0.00 sec)

Pernyataan diatas akan membuat sebuah fungsi tersimpan yang bernama fungsi1. Pada pembuatan fungsi1, dideklarasikan sebuah variabel parameter bernama a dengan tipe data SMALLINT. Isi dari fungsi1 adalah pertambahan antara nilai dari variabel a dengan nilai variabel a yang sama (a+a).

Hasil dari pertambahan adalah sebuah nilai bertipe data INT sesuai nilai yang ada dalam keyword RETURNS meskipun merupakan pertambahan dari variabel a yang bertipe data SMALLINT.

Contoh penggunaan fungsi1 :
mysql> select fungsil(50);
            fungsil(50)
           100
1 row set   (0.01 sec)

Perintah diatas akan memanggil fungsi1, dimana dalam perintah diatas dimasukkan nilai 50 sebagai parameter. Nilai 50 disimpan dalam variabel parameter a. Nilai variabel a tersebut digunakan dalam keyword RETURN, yaitu a + a ( 50 + 50 ), hasilnya nilai 100. Nilai 100 akan bertipe data sesuai dengan isi dari keyword RETURNS yaitu INT.

Contoh lain pembuatan fungsi tersimpan :
mysql> CREATE FUNCTION fungsi2(kar CHAR(50))
-> RETURNS INT
-> RETURN LENGTH(kar); Query OK, 0 rows affected (0.00 sec)
Perintah diatas akan membuat sebuah fungsi tersimpan bernama fungsi2. Dalam fungsi2 di deklarasikan sebuah variabel parameter bernama kar dengan tipe data CHAR dan lebar karakter yang mampu ditampung sejumlah 50 karakter. Isi dari fungsi2 adalah fungsi LENGTH yang berguna untuk menghitung jumlah karakter dari isi variabel kar.

Hasil dari fungsi2 adalah sebuah nilai bertipe data INT.

Dari contoh diatas, dapat diketahui bahwa sebuah fungsi tersimpan dapat berisi sebuah fungsi MySQL atau fngsi tersimpan lainnya.

Contoh penggunaan fungsi2 :

mysql> select fungsi2('Matakuliah' )
   fungsi2('Matakuliah')                   |
   10  
 1 row in set  (0.02  sec)

Hasil  dari  pemanggilan  fungsi2  adalah menghitung jumlah karakter input.  Jumlah karakter Matakuliah adalah 10.Untuk  menghapus   sebuah   obyek   fungsi   tersimpan   menggunakan   perintah   DROP FUNCTION.

DROP FUNCTION [IF EXISTS] nama_fungsi

Contoh :
mysql> DROP  FUNCTION fungsi2;
Query OK,   0 rows  affected  (0.01 sec)

Demikianlah, Terima kasih.

No comments:

Post a Comment