Kamis, 25 September 2008

1. PENGERTIAN DARI TRIGGERS

· Triger merupakan nama object database yang berhubungan dengan sebuah tabel dan aktif ketika suatu kejadian muncul untuk tabel tersebut.

· Trigger adalah :

- Sebuah blok PL/SQL atau prosedur PL/SQL yang berhubungan dengan table, view, schema atau database.

- Akan dieksekusi secara implicit pada saat sebuah kejadian tertentu terjadi.

· Triger merupakan bentuk khusus suatu Store Procedure yang akan dilaksanakan secara otomatis jika terjadi perubahan (UPDATE, INSERT, DELETE) pada sebuah tabel database. Ini yang disebut dengan Database Trigger.

· Ada 2 jenis trigger yaitu :

- Application trigger: Terjadi pada saat sebuah kejadian terjadi dengan aplikasi tertentu.

- Database trigger : Terjadi pada saat sebuah data terjadi seperti DML pada table (INSERT, UPDATE atau DELETE) atau pada saat system terjadi (seperti logon atau shutdown) yg terjadi pada schema atau database.

2. KEUNTUNGAN TRIGGER

Dalam sebuah tabel dapt mempunyai beberapa trigger. Trigger sangat berguna karena dapat secara otomatis dilaksanakan dalam server, sehingga menyederhanakan pemorgraman, sekaligus menjaga konsistensi informasi dalam database. Keuntungan penggunaan Trigger antara lain :

a. Standarisasi (penyeragaman) proses. Trigger dibuat satu kali dan tersimpan dalam database, sehingga semua client yang menggunakan database tersebut sekaligus adalah pengguna Trigger. Dengan demikian seluruh client akan menggunakan operasi yang sama terhadap suatu proses dalam database, karena Trigger yang dipakai sama.

b. Menyederhanakan pemrograman. Apabila Trigger sudah dibuat dalam database server, seluruh program dalam bahasa apapun, yang mengakses database tersebut akan secara otomatis menggunakan Triger yang ada tanpa harus dibuat perintahnya dalam program aplikasi.

c. Mudah diperbaharui. Apabila Trigger pernah di-update dalam database server, semua client akan menggunakan perbaruan yang terakhir.

d. Kecepatan dan efisiensi proses. Oleh karena Trigger disimpan dalam server dalam kode yang sudah terkompilasi, dan dilaksanakan dalam server sehingga lalu-lintas jaringan menjadi berkurang.

e. Memudahkan tim kerja. Apabila Trigger dan Stored Procedure sudah dibuat, anggota tim kerja dapat menggunakan bahasa pemrograman yang berbeda dalam mengaksesnya, karena Triger disimpan dan dilaksanakan oleh server, tanpa melihat bahasa pemrograman apa yang dipakai pengguna database.

3. PETUNJUK UNTUK DISAIN TRIGGER

- Gunakan trigger untuk memastikan pada saat sebuah operasi tertentu terbentuk, aksi yang berhubungan dengannya juga terbentuk.

- Gunakan database trigger hanya untuk operasi yang global.

- Tidak mendisain trigger untuk fungsi-fungsi yang yang telah dibuat oleh server database dan tidak boleh membuat duplikasi trigger.

- Buatlah store procedur dan invoke prosedur dalam sebuah trigger jika kode PL/SQL terlalu panjang.

- Gunakan trigger untuk menghasilkan hasil dengan tingkat interdepensi yang tinggi, yang sulit untuk dimaintain dalam aplikasi yang besar.

- Database trigger akan terjadi untuk setiap user pada saat sebuah kejadian yang mentrigger dibuat.

4. MEMBUAT TRIGGER

Syntaks

Text Box: CREATE     [DEFINER = { user | CURRENT_USER }]     TRIGGER trigger_name trigger_time trigger_event     ON tbl_name FOR EACH ROW trigger_stmt

Sebelum membuat coding untuk trigger, tentukan terlebih dahulu nilai-nilai dari komponen trigger yaitu: trigger timing, trigger event dan trigger type.

Part

Keterangan

Nilai yang mungkin

Trigger timing (TRIGGER_TIME)

Kapan triger terjadi sesuai dengan trigger event.

BEFORE

AFTER

Trigger_event

Operasi manipulasi data tertentu pada tabel atau view yang menyebabkan trigger terjadi

INSERT

UPDATE

DELETE

Trigger_stmt

Aksi yang terjadi pada saat trigger terjadi

Block PL/SQL

· Trigger timing à kapan trigger terjadi ?

o BEFORE à Mengeksekusi body trigger sebelum mentrigger event DML pada sebuah table.

o AFTER à Mengeksekusi body trigger setelah mentrigger event DML pada sebuah table

· Triggering user event (Trigger_event) à DML statement yang menyebabkan trigger dieksekusi. Peristiwa atau kejadian yang memicu terjadinya Trigger. Kita dapat menggunakan statement INSERT, UPDATE, DELETE.

o Saat menggunakan UPDATE maka perlu memasukan list column untuk mengidentifikasikan kolom mana yang berubah,.

o Tidak perlu menspesifikasikan list kolom untuk statement INSERT atau untuk DELETE karena perintah tersebut akan berpengaruh pada suatu row.

o Trigger dapat berisi satu, dua atau ketiganya dari operasi DML.

INSERT or UPDATE or DELETE ……

· Trigger body (trigger_statement) à aksi apa yang trigger buat ? Trigger body merupakan pernyataan atau perintah yang dilaksanakan Trigger. Jika pernyataan yang dilaksanakan lebih dari satu perintah, beberapa perintah dapat dimasukan ke dalam block BEGIN .. END .

Contoh :

Perhatikan tabel Barang berikut ini :

Misalkan stock pada tabel barang masih kosong. Kemudian akan dibuat Trigger yang otomatis akan mengupdate stock pada tabel barang jika terdapat proses pembelian.

Adapun tabel DetailPembelian mempunyai struktur sebagai berikut:

Table Create Table

--------------- --------------------------------------------------

detailpembelian CREATE TABLE `detailpembelian` (

`NoReference` varchar(10) NOT NULL default '',

`KodeBarang` varchar(12) NOT NULL default '',

`HargaBeli` double NOT NULL default '0',

`JumlahBarang` int(8) NOT NULL default '0',

`Operator` varchar(8) NOT NULL default ''

) ENGINE=MyISAM DEFAULT CHARSET=latin1

Text Box: DELIMITER $$  create trigger `trigerbeli` BEFORE INSERT on `detailpembelian`  for each row BEGIN  UPDATE barang SET Stock=IF(ISNULL(Stock),0,Stock)+new.JumlahBarang  WHERE KodeBarang = new.kodeBarang; END; $$  DELIMITER ;Kemudian dibuat Trigger dengan nama trigerbeli

Contoh diatas berarti perintah untuk membuat Trigger bernama trigerbeli yang akan otomatis dilaksanakan sebelum tabel detailpembelian diisi dengan suatu record. Pada setiap sebelum satu baris (record) ditambahkan ke dalam tabel DetailPembelian, tabel Barang akan di-update, yaitu isi kolom Stock di-update dengan isi sebelumnya ditambah banyak barang yang akan ditambahkan ke dalam tabel detailpembelian, untuk barang dalam tabel barang yang kode barangnya sama dengan kode barang dari baris yang akan disisipkan ke dalam tabel detailpembelian.

Perhatikan bahwa Trigger di atas digunakan pernyataan new.JumlahBarang dan new.kodeBarang. Perlu diketahui pada saat proses menambahkan data, MySQL akan membuat semacam tabel temporer dengan struktur yang sama dengan tabel yang akan diisi. Tabel temporer diberi nama new. Pada saat proses pemasukan data (INSERT), nilai-nilai yang akan dimasukan ke dalam tabel disalin ke dalam tabel NEW.

Perlu diketahui juga hal yang hampir sama juga berlaku pada proses penghapusan data (DELETE). Pada perintah menghapus data akan dibuat tabel temporer OLD dengan struktur yang sama dengan tabel yang record-nya akan dihapus. Untuk proese updating data (UPDATE) kedua tabel temporer yaitu OLD dan NEW dibuat. Old akan menyimpan data yang dihapus (sebelum di-update) dan New berisi data pengganti (data baru).

Sebelum sebuah trigger dibuat dan belum dihapus, Trigger akan selalu siap dan akan bekerja sesuai dengan tugasnya, sehingga siapapun dan dari program apapun menambahkan data ke dalam tabel detailpembelian, berarti pula akan mengupdate jumlah stok dalam tabel Barang.

Isikan tabel detailpembelian dengan data :

INSERT INTO detailpembelian` (‘1’,’PS.001’,900,50,’SAYA’);

Berapakah stock untuk tabel Barang untuk barang PS.001 ???

5. MENGHAPUS DAN MEMPERBAIKI TRIGGER

MySQL tidak menyediakan fasilitas untuk memperbaiki atau mengedit Trigger. Oleh karena itu cara untuk memperbaiki Trigger adalah dengan menghapusnya, kemudian membuat yang baru.

Tidak ada komentar: