Anda di halaman 1dari 6

Trigger

Pemrograman Basis Data pg. 1


Pertemuan 6:
Trigger
Sub-Materi:
Pembuatan Trigger
Uji Coba Trigger

Trigger merupakan bentuk khusus dari Stored Procedure (SProc)
yang merespon pada event tertentu. Ada 2 bentuk Trigger yaitu
(1) DDL Trigger dan (2) DML Trigger.
DDL Trigger melakukan proses ketika terjadi perubahan pada
struktur database melalui CREATE, ALTER, DROP, dan statement
sejenis.
DML Trigger merupakan sekumpulan kode yang ditempelkan
pada tabel atau view. Tidak seperti SProc, yang dipanggil secara
eksplisit, Trigger secara otomatis dijalankan ketika terjadi event
pada tabel atau view.

Gambar 1 Trigger dalam database
Ada 3 event dalam Trigger, sesuai dengan Gambar 1, yang
mengikuti 3 tipe DML pada SQL. Dari ketiga event ini, Trigger
juga mampu melakukan hibridisasi, yaitu pencampuran 2 event.
Event-event ini antara lain:

Trigger
Pemrograman Basis Data pg. 2
1. INSERT Trigger
2. DELETE Trigger
3. UPDATE Trigger
Seperti yang dijelaskan sebelumnya bahwa Trigger merespon
pada event tertentu dan Trigger menempel pada tabel atau view,
maka sintaks untuk membuat Trigger sedikit istimewa
dibandingkan sintaks DDL lainnya.
Pembuatan Trigger
Masih sama seperti database object lainnya, Trigger dibuat,
diubah dan dihapus menggunakan perintah DDL.
CREATE TRIGGER <nama trigger>
ON [<nama schema>.]<nama tabel>
[WITH ENCRYPTION]
{FOR|AFTER|INSTEAD OF}
<[DELETE][,][INSERT][,] [UPDATE]>
AS
BEGIN
<SQL> | <script block>
END;
--
ALTER TRIGGER <trigger_name>
ON [<nama schema>.]<nama tabel|view>
[WITH ENCRYPTION]
{FOR|AFTER|INSTEAD OF}
<[DELETE][,][INSERT][,] [UPDATE]>
AS
BEGIN
<SQL> | <script block>
END;
--
DROP TRIGGER <nama trigger>;
ON
Bagian ini digunakan untuk menuliskan pada tabel atau view
mana Trigger akan ditempatkan.
Trigger
Pemrograman Basis Data pg. 3
WITH ENCRYPTION
Dengan aktifnya property ini, secara otomatis sistem akan
melakukan enkripsi terhadap Trigger. Sehingga tidak ada
seorang pun, bahkan sang pembuat, yang dapat melihat kode
Trigger. Sebagai tambahan, property ini juga dapat digunakan
pada view dan SProc.
FOR|AFTER vs INSTEAD OF
Trigger terjadi karena event tertentu baik sebelum (INSTEAD
OF) maupun setelah (FOR/AFTER) event terjadi. AFTER Trigger
dikerjakan setelah data masuk kedalam Trigger, berbeda dengan
INSTEAD OF Trigger yang dikerjakan sebelum data di-INSERT-
kan. Sehingga ada 2 model data dalam Trigger, yaitu:
1. INSERTED data
Data ini diperoleh dari event INSERT. Untuk pengambilan
datanya, perhatikan query berikut ini.
SELECT *
FROM INSERTED;
2. DELETED data
Data ini diperoleh dari event DELETE. Untuk pengambilan
datanya perhatikan query berikut ini.
SELECT *
FROM DELETED;
Untuk proses UPDATE, tidak ada UPDATED data. Update adalah
proses DELETE yang dilanjutkan dengan proses INSERT. Oleh
karena itu, dalam kasus UPDATE, perlu dipertimbangkan
DELETED sebagai data lama (old value) dan INSERTED sebagai
data baru (new value).
Dalam beberapa permasalahan, kita harus memanipulasi data
setelah kondisi terpenuhi. Misal ketika terjadi transaksi
penjualan, maka terjadi penambahan data pada tabel penjualan.
No transaksi, untuk alasan integritas data dan keamanan, harus
dibangkitkan secara otomatis oleh SQL Server. Jadi ketika user
melakukan INSERT INTO, hanya data-data yang terlihat ketika
transaksi yang menjadi bagian dari VALUES (misal, nama
Trigger
Pemrograman Basis Data pg. 4
customer dan barang yang dibeli). Nah, bagaimana cara kita
membuat no transaksinya? Belum lagi jika terjadi kesalahan
entri yang akan mengakibatkan kerusakan data!
INSTEAD OF Trigger memberikan solusi untuk permasalahan ini.
Seperti yang telah disebutkan sebelumnya, FOR atau AFTER
Trigger merupakan Trigger yang dikerjakan setelah data
termanipulasi. Sebaliknya, INSTEAD OF Trigger mampu
mengerjakan proses sebelum data masuk kedalam Trigger.
Sehingga dapat dilakukan pembangkitan no transaksi. Ketika
terjadi sesuatu yang menyebabkan kondisi, sebelum data
dientrikan, menjadi FALSE, maka SQL Server melakukan
pembatalan transaksi.
Alur dari Trigger dapat dilihat pada Gambar 2.

Gambar 2. Alur proses Trigger
Trigger
Pemrograman Basis Data pg. 5
INSERT|UPDATE|DELETE
Bagian ini menspesifikasikan pada event apa Trigger akan
dieksekusi. Seperti yang telah disebutkan sebelumnya, event bisa
terjadi pada event tunggal atau pun campuran ketiganya. Untuk
yang campuran, kita harus menggunakan koma untuk memisah
masing-masing event.
Sebagai contoh penggunaan Trigger, misal ketika terjadi
transaksi penjualan, sistem secara otomatis melakukan
pengubahan jumlah saldo yang dimiliki oleh customer.
Pengubahan jumlah saldo ini terjadi setelah data transaksi
masuk kedalam tabel Penjualan. Perhatikan hasil querynya
berikut ini:
CREATE TRIGGER tg_ins_for_Penjualan
ON Penjualan
FOR INSERT
AS
BEGIN
UPDATE Customer
SET Saldo=Saldo-INSERTED.TotalJual
WHERE CustID=INSERTED.CustID;
END;
Karena terjadi pada event INSERT, maka trigger mempunyai hak
akses kedalam tabel INSERTED.
Uji Coba Trigger
Kita akan mencoba mencatat semua transaksi yang terjadi pada
tabel mahasiswa kedalam log_tr_mhs. Karena tabel ini belum
ada, kita akan membuatnya terlebih dahulu menggunakan script
berikut:
CREATE TABLE log_mhs(
logid INT CONSTRAINT PK_log_mhs PRIMARY KEY,
nim CHAR(11),
jns_dml CHAR(1) CONSTRAINT CK_log_mhs_dml
CHECK(jns_dml IN('I', 'U', 'D')),
waktu DATETIME
);
Trigger
Pemrograman Basis Data pg. 6
Untuk setiap proses INSERT dalam tabel mahasiswa, SQL Server
akan menyimpan transaksi insert tersebut kedalam tabel
log_mhs secara otomatis.
CREATE TRIGGER tg_ins_for_mahasiswa
ON mahasiswa
FOR INSERT
AS
BEGIN
-- buat logid
DECLARE @logid INT;
SET @logid = (SELECT COUNT(*)+1
FROM mahasiswa);

DECLARE @nim CHAR(11);
SELECT @nim=nim
FROM INSERTED;

INSERT INTO log_mhs
VALUES(@logid, @nim, 'I', GETDATE());
END;
Setelah kita buat Trigger-nya, sekarang kita coba untuk
mengmasukkan data kedalam tabel mahasiswa.
INSERT INTO mahasiswa
VALUES('10390102001', 'Rahmat',
'Jl. Gubeng 23', 'Surabaya', 'P', 'B');
Setelah itu, kita coba lihat kedalam tabel log_mhs.
SELECT * FROM log_mhs;
Hasil:
logid nim jns_dml waktu
11 10390102001 I 2011-08-25 14:11:12.610

Anda mungkin juga menyukai