29 a. Secara alami bersifat algoritmik, dimana rule tersebut dijalankan sesuai
dengan kondisi yang berlaku. b. Kondisi yang ditetapkan adalah data pengguna.
c. Deskripsi kerjanya adalah mengubah dan meng-query data oleh pengguna sesuai dengan rule yang dijalankan.
4. Output yang ditentukan secara lengkap oleh spesifikasi dari query perubahan yang dilakukan.
3
Library IT Telkom : Active Database. 2008.
2.6 Trigger
Trigger adalah suatu prosedur yang dilakukan oleh DBMS jika terjadi perubahan pada tabel database. Beberapa prosedur yang dapat dilakukan oleh
trigger antara lain verifikasi data, melacak perubahan yang terjadi pada sebuah tabel atau melakukan pengecekan business rule. Tabel yang dijadikan acuan untuk
pembuatan trigger disebut tabel trigger. Sepintas trigger mirip dengan store procedure, tetapi trigger tidak dapat dieksekusi secara langsung. Trigger harus
didasarkan kepada salah satu statement SQL insert, update, atau delete, dan SQL server akan secara otomatis mengeksekusi trigger ketika user mengeksekusi salah
satu statement SQL tersebut. SQL server memperlakukan trigger dan statement SQL yang
memanggilnya sebagai transaksi tunggal. Keseluruhan transaksi dapat di-rollback dari dalam trigger. Misalnya ada proses pengecekan error pada trigger dan
memanggil rollback transaction jika error ditemukan. Yang perlu diingat adalah jika sebuah transaksi user memanggil sebuah trigger, dan trigger tersebut
30 memanggil sebuah rollback transaction, maka SQL server akan me-rollback tiap
langkah eksekusi dari trigger sekaligus tiap langkah dari transaksi user. Hal ini dapat menyebabkan penurunan performance data dilakukan sebelum proses
transaksi user. Beberapa alasan mengapa perlu menggunakan trigger adalah sebagai
berikut : a.
Untuk memaksakan integritas data. Trigger digunakan untuk memaksakan integritas data, bukan untuk
menghasilkan sebuah data sebagai hasil query. Trigger biasanya dieksekusi apabila ada perubahan data pada tabel. Ketika data pada sebuah
tabel diubah melalui proses update atau delete, maka perubahan tersebut dapat mempengaruhi data pada tabel-tabel lainnya. Hal ini dapat
menyebabkan inkonsistensi data sehingga trigger dapat digunakan untuk “memaksa” perubahan di tabel-tabel yang terpengaruh agar database tetap
konsisten. Misalnya digunakan trigger untuk melakukan cascading delete
pada sebuah tabel pelanggan di database rental VCD. Sebelum data seorang pelanggan tersebut harus dihapus terlebih dahulu. Setelah itu data
pelanggan yang bersangkutan dapat dihapus, tanpa menimbulkan ketidakstabilan database.
b. Untuk memaksakan business rule.
Trigger dapat digunakan untuk memaksakan business rule aturan- aturan yang spesifik yang ada pada sebuah sistem yang terlalu kompleks
31 untuk dikerjakan oleh constraint. Misalkan seorang pelanggan tidak
diperbolehkan meminjam sebuah film jika belum mengembalikan film yang sebelumnya dipinjam, yang sudah habis batas pinjamnya.
c. Untuk menghasilkan nilai dari sebuah perhitungan.
Misalkan ingin membuat nomor pelanggan berdasarkan nama dan nomor teleponnya, maka dapat digunakan trigger untuk melakukan proses
pengambilan substring
dari nama
dan nomor
telepon dan
menggabungkannya sehingga menjadi sebuah nomor pelanggan. d.
Untuk melacak perubahan atau update pada sebuah tabel. Misalkan pada database kepegawaian terdapat sebuah tabel
pegawai yang sekaligus memuat data gaji pegawai. Jika data gaji tersebut diubah dilakukan proses update maka update trigger dapat melakukan
perubahan record tidak hanya pada tabel pegawai, tetapi juga pada tabel audit keuangan yang melakukan penghitungan pajak penghasilan dari
pegawai. Sepintas trigger juga mirip dengan constraint, tetapi trigger
merupakan prosedur yang reaktif karena dilakukan setelah sebuah statement SQL dikerjakan, sedangkan constraint merupakan prosedur
yang proaktif karena dilakukan sebelum sebuah statement SQL dikerjakan.
Pada MySQL trigger untuk insert, update dan delete dapat diawali dengan
AFTER
atau
FOR
adalah untuk membuat trigger biasa, misal untuk trigger pengubahan nilai gaji pegawai digunakan
FOR UPDATE
atau
AFTER
32
UPDATE
SQL server 2000 menggunakan awalan
AFTER
, sedangkan
FOR
digunakan pada SQL server versi sebelumnya.
INSTEAD OF
adalah untuk membuat trigger pengganti dari trigger yang sudah didefinisikan
sebelumnya pada tabel atau view dengan action yang sama. Misal sebuah trigger
INSTEAD OF INSERT
pada sebuah view untuk menggantikan trigger yang sudah didefinisikan untuk tabel asalnya.
Berikut beberapa contoh pembuatan Trigger : a.
INSERT
CREATE TRIGGER trigger_name ON table_name
AFTER INSERT AS Commands
Contoh :
CREATE TRIGGER audit_changes ON [dbo][roysched] FOR INSERT
AS INSERT audit_trail[title_id,royalty]
SELECT title_id,royalty From inserted
Penjelasan : Insert trigger tersebut untuk mengkopi record baru yang
ditambahkan ke tabel roysched pada database pubs. Tabel roysched menyimpan daftar judul buku yang ditulis oleh pengarang beserta
presentasi royalti yang diterima masing-masing pengarang. Karena informasi ini cukup penting, maka insert trigger dapat digunakan untuk
mengkopi barisrecord baru yang ditambahkan pada tabel ini ke tabel lain
33 yang diberi nama audit_trail. Tabel ini harus memiliki nama kolom dan
tipe data yang sama dengan tabel roysched jika ingin mengkopi seluruh informasi baris. Jika ingin mengkopi kolom title_id dan royalty saja, maka
cukup dibuat dua kolom pada tabel audit_trail. b.
UPDATE Update trigger akan dijalankan pada sebuah tabel jika isi salah satu
atau beberapa kolomnya berubah diupdate. Contoh update trigger berikut akan menambahkan baris baru pada tabel audit_trail jika nilai
kolom royalty di tabel roysched diupdate. Nilai royalty untuk title_id TC7777 yang tadinya 16 akan diupdate menjadi 20. Prosedur ini
diperlukan untuk menyimpan perubahan yang terjadi pada tabel roysced, khususnya pada kolom royalty. Contoh :
CREATE TRIGGER audit_update ON roysched FOR UPDATE AS IF UPDATE royalty
BEGIN INSERT INTO audit_trail title_id,royalty
SELECT title_id,royalty FROM inserted
END
c. DELETE
Delete trigger berikut akan menghapus record pada tabel audit_trail jika record yang bersesuaian dengannya di tabel roysced
dihapus. Contoh :
CREATE TRIGGER delete_audit_trail ON roysched FOR DELETE
AS delete from audit_trail
34
where title_id in select title_id from deleted
Opsi WITH ENCRYPTION dapat digunakan jika ingin membuat trigger yang terenkripsi, sehingga user lain tidak dapat melihat definisi
trigger tersebut. Hampir semua sintaks SQL dapat digunakan untuk membuat trigger, seperti penggunaan IF untuk pengecekan kondisi logic
dari trigger. Beberapa keyword yang tidak dapat digunakan dalam trigger adalah sebagai berikut :
ALTER DATABASE CREATE DATABASE
DROP DATABASE DISK INIT
DISK RESIZE LOAD DATABASE
LOAD LOG RECONFIGURE
RESTORE DATABASE RESTORE LOG
2.7 Grafik