Fuction Sebuah function dapat digunakan secara langsung dalam statement SELECT, UPDATE, dan DELETE. Hasil dari function dapat dikembalikan sebagai output. Sebuah function hanya dapat mengembalikan sebuah nilai saja.
Membuat fuction mysql> delimiter //
mysql> create function nama_lengkap(in_nama_depan varchar(15), in_nama_belakang varchar(15))
Melihat fuction yang telah dibuat Function apa saja yang telah kita buat dapat dilihat menggunakan statement SHOW FUNCTION STATUS.
mysql> show function status; Menghapus functionFunction yang telah dibuat dapat dihapus menggunakan DROP FUNCTION nama_function.
mysql> DROP FUNCTION full_name;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW FUNCTION STATUS;
Empty set (0.00 sec)
Procedure Procedure dapat berisi statement SQL (INSERT, UPDATE, DELETE, SELECT) atau operasi lain yang disimpan dalam database. Sebuah procedure dapat dipanggil menggunakan statement CALL nama_procedure disertai parameter yang diperlukan.
Membuat procedure sintaks untuk membuat procedure adalah sebagai berikut; CREATE PROCEDURE nama_procedure (parameter_procedure())routine_body
Berikut contoh pembuatan procedure:
mysql> delimiter //
mysql> create procedure show_pekerja()
-> begin
-> select*from pekerja;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> call show_pekerja ();
Parameter dalam procedure Procedure menerima parameter (proc_parameter) yang didefinisikan sebagai berikut: proc_parameter:[ IN | OUT | INOUT ] param_name type
Dalam parameter procedure, didefinisikan jenis parameter, yaitu IN, OUT, atau INOUT. Bila tidak dispesifikasikan saat pembuatan, maka default jenis parameter yang dipilih adalah IN.
· Parameter IN mengirimkan sebuah nilai ke dalam procedure. Procedure bisa saja merubah nilai parameter ini, namun perubahan tersebut tidak visibel terhadap pemanggil procedure ketika procedure tersebut selesai.
· Parameter OUT mengirimkan nilai dari procedure ke pemanggil. Nilai inisial dari parameter ini adalah NULL dan nilainya visibel terhadap pemanggil.
· Parameter INOUT diinisialisasi oleh pemanggil, dapat dimodifikasi oleh procedure, dan perubahan nilai parameter visibel terhadap pemanggil ketika procedure selesai.
Parameter IN Berikut adalah contoh penggunaan parameter IN:
mysql> delimiter $
mysql> create procedure getPekerjaByAlamat (in namaAlamat varchar(255))
-> begin
-> select*from pekerja where alamat LIKE namaAlamat;
-> end $
mysql> delimiter ;
Pada contoh di atas, dibuat procedure getPekerjaByAlamat dengan satu parameter masukan berjenis IN bernama namaAlamat. Procedure ini digunakan untuk menampilkan data pada tabel pekerja dengan nama kota sesuai parameter masukan. Pemanggilan procedure ini dapat dilihat pada contoh di bawah ini. Pada contoh ini, kita memasukkan Sleman” sebagai parameter masukan procedure.
mysql> call getPekerjaByAlamat("Sleman");
Parameter OUT Berikut adalah contoh penggunaan parameter OUT;
Pada contoh di atas, dibuat procedure untuk menampilkan jumlah pekerja dalam tabel. Hasil query tersebut disimpan dalam variabel numPekerja dengan statement INTO numPekerja. Pemanggilan pekerja dengan parameter OUT dilakukan dengan menggunakan variabel session yang diawali dengan karakter @. Pemanggilan procedure getNumPekerja ditunjukkan sebagai berikut:
mysql> call getNumPekerja(@num);
Parameter INOUT Berikut adalah contoh penggunaan parameter INOUT:
mysql> delimiter ^^
mysql> create procedure increase(inout number int)
-> begin
-> set number = number + 15;
-> end ^^
Query OK, 0 rows affected (0.04 sec)
mysql> delimiter ;
Pada contoh di atas, kita membuat procedure increase untuk menambahkan input dengan nilai 15. Memodifikasi nilai parameter input dilakukan dengan menggunakan SET. Contoh berikut memperlihatkan bagaimana memanggil procedure increase. Kita mendefinisikan terlebih dahulu variabel session @num dengan nilai 100. Kemudian setelah pemanggilan increase, nilai @num menjadi 115.
mysql> set @num = 100;
Query OK, 0 rows affected (0.00 sec)
mysql> call increase(@num);
Query OK, 0 rows affected (0.00 sec)
mysql> select @num;
Melihat procedure yang telah dibuat Procedure yang telah kita buat dapat dilihat menggunakan statement SHOW PROCEDURE STATUS sebagai berikut:
mysql> show procedure status;
Menghapus procedure Procedure yang telah kita buat dapat dihapus menggunakan DROP PROCEDURE.
Mysql> DROP PROCEDURE increaseGaji; Procedure Input Data mysql> create table hoho( nama varchar(10), alamat varchar(10));
Query OK, 0 rows affected (0.13 sec)
mysql> delimiter #
mysql> create procedure isi( in nama varchar(10), alamat varchar(10))
TRIGGER Trigger adalah sebuah objek database yang diasosiasikan dengan sebuah tabel. Trigger diaktifkan ketika sebuah event terjadi pada tabel yang diasosiasikan. Tabel yang diasosiasikan dengan trigger haruslah sebuah tabel yang permanen dan bukan temporary tabel.
Membuat Trigger Trigger bisa dibuat dengan syntax sbb :
CREATE TRIGGER <trigger_name> <trigger_time> <trigger_event> ON <table> FOR EACH ROW <trigger_body statements> Pada sintaks di atas, trigger_name adalah nama dari trigger yang akan kita buat.
Trigger_time adalah saat aktivasi trigger. Parameter trigger_time dapat berisi BEFORE atau AFTER, yang menandakan apakah aktivasi trigger dilakukan sebelum atau sesudah terjadi perubahan pada tabel.
Trigger_event menunjukkan jenis statement yang mengaktifkan trigger.
Trigger_event dapat didefinisikan sebagai salah satu dari: INSERT: trigger diaktifkan ketika sebuah baris baru ditambahkan ke tabel, sebagai contoh melalui statement INSERT, LOAD DATA, atau REPLACE.UPDATE: trigger diaktifkan ketika sebuah baris dimodifikasi, sebagai contoh melalui statement UPDATE. DELETE: trigger diaktifkan ketika sebuah baris dihapus, melalui statement DELETE dan REPLACE. Namun demikian, DROP TABLE dan TRUNCATE TABLE tidak mengaktifkan trigger DELETE Tidak boleh ada dua buah trigger yang sama pada sebuah tabel yang memiliki trigger_time dan trigger_event yang sama. Sebagai contoh, kita tidak dapat membuat dua buah BEFORE UPDATE trigger pada satu buah tabel yang sama, namun kita dapat membuat trigger BEFORE UPDATE dan AFTER UPDATE untuk satu tabel yang sama.
Trigger_body merupakan definisi statement yang dijalankan ketika sebuah trigger diaktifkan. Jika ada beberapa statement yang ingin dijalankan, statement-statement tersebut dapat didefinisikan di antara BEGIN … AND.
Keyword OLD dan NEW dapat digunakan untuk mereferensi nilai sebelum dan sesudah trigger dilakukan. Sebagai contoh OLD.nama_kolom menunjukkan nilai kolom sebelum data tersebut dihapus atau diupdate, sedangkan NEW.nama_kolom menunjukkan nilai kolom sebuah data yang akan dimasukkan atau nilai kolom data setelah diupdate.
BEFORE TRIGGER Berikut adalah contoh trigger yang dijalankan sebelum data dimasukkan ke dalam sebuah tabel.
mysql> DELIMITER (spasi)# mysql> CREATE TRIGGER sebelum_insert BEFORE INSERT ON pegawai FOR EACH ROW BEGIN IF NEW.gaji IS NULL OR NEW.gaji = 0 THEN SET NEW.gaji = 500000; ELSE SET NEW.gaji = NEW.gaji + 100000; END IF; END # Query OK, 0 rows affected (0.23 sec) Mysql> DELIMITER(spasi);
Dalam TRIGGER diatas adalah salah satu contoh trigger yang akan dijalankan sebelum sebuah even dipanggil (BEFORE INSERT). Dalam trigger ini akan mengganti nilaigaji jika gaji yang di-INSERT-kan bernilai NULL atau 0 dan akan menambahkan nilai 100rb jika kita masukkan selain NULL dan 0.
Namun demikian, kita tidak dapat mengupdate tabel yang sama dengan tabel yang diasosiasikan dengan trigger menggunakan trigger. Mysql> DELIMITER # mysql> CREATE TRIGGER before_update BEFORE UPDATE ON pegawai FOR EACH ROW BEGIN UPDATE pegawai SET gaji=gaji+(NEW.gaji - OLD.gaji) WHERE nip=NEW.nip; END # Query OK, 0 rows affected (0.03 sec) mysql> DELIMITER ; mysql> UPDATE pegawai SET gaji = 2000000 WHERE nip="PEG-1017"; ERROR 1442 (HY000): Can't update table 'pegawai' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
AFTER TRIGGER Berikut adalah contoh trigger yang dijalankan setelah update dilakukan terhadap tabel Untuk mencobanya kita buat dulu table pencatat, nanti di table pencatat ini akan kita buat syntax untuk mencatat perubahan yang terjadi. mysql> create table pencatat(catatan varchar(50)); Query OK, 0 rows affected (0.48 sec) mysql> delimiter # mysql> CREATE TRIGGER trigger_cat AFTER UPDATE ON pegawai FOR EACH ROW BEGIN INSERT INTO pencatat VALUES(concat('akun ',NEW.nip,' dari ',OLD.gaji, ' to ',NEW.gaji)); END # Query OK, 0 rows affected (0.17 sec) mysql> delimiter ; TRIGGER diatas akan dieksekusi setelah perintah UPADATE dijalankan.
Melihat dan Menghapus Trigger yang Sudah Dibuat Untuk melihat TRIGGER kita bisa menggunakan syntax mysql> show triggers in lab4; mysql> drop trigger before_update;