Penggunaan Trigger di SQL Server
Sebelum bermain dengan trigger, alangkah baiknya kita tahu apa itu trigger, jenis-jenis trigger dan pemanfaatan trigger. Trigger adalah stored procedure yang digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel. Jenis-jenis triger :
- After Trigger
- Instead of Trigger
Biasanya trigger digunakan untuk
- Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem penjualan, jika dientri barang baru maka stok akan bertambah secara otomatis. Sebaliknya jika barang terjual, stok akan berkurang secara otomatis.
- Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log.
- Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut disimpan.
Nah kali ini kita akan memanfaatkan fungsi trigger untuk sistm log / mencatat aktifitas table mulai dari insert, update dan delete. Yang akan kita gunakan adalah trigger jenis pertama, yaitu After Trigger.
Pertama : Buat 2 table, misal table siswa dan table siswa_log, bisa gunakan query di bawah ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| CREATE TABLE siswa ( siswa_id int identity, siswa_nama varchar (50) NULL , siswa_alamat varchar (255) NULL ) Go INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Yudistira' , 'Bojongsari' ) INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Febri' , 'Mrebet' ) INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Yudistira' , 'Bojongsari' ) INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Febri' , 'Mrebet' ) INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Yudistira' , 'Bojongsari' ) INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Rizal' , 'Bojongsari' ) GO CREATE TABLE siswa_log ( siswa_id int identity, siswa_nama varchar (50) NULL , siswa_alamat varchar (255) NULL , aktifitas varchar (255) NULL , waktu datetime ) |
Kedua : Mencatat setiap aktifitas insert ke table log
1
2
3
4
5
6
7
8
| CREATE TRIGGER triggerAfterInsert on siswa AFTER INSERT AS declare @siswa_id int , @siswa_nama varchar (50), @siswa_alamat varchar (50), @aktifitas varchar (100); select @siswa_id=i.siswa_id from inserted i; select @siswa_nama=i.siswa_nama from inserted i; select @siswa_alamat=i.siswa_alamat from inserted i; set @aktifitas= 'Memasukkan data siswa' ; insert into siswa_log(siswa_id,siswa_nama,siswa_alamat,aktifitas,waktu) values (@siswa_id,@siswa_nama,@siswa_alamat,@aktifitas,getdate()); |
Masukkan data ke table siswa :
1
| INSERT INTO siswa(siswa_nama,siswa_alamat) values ( 'Purnomo' , 'Watukumpul' ) |
Begini hasilnya
Ketiga : Mencatat setiap aktifitas update ke table log
1
2
3
4
5
6
7
8
9
10
11
12
| CREATE TRIGGER triggerAfterupdate on siswa AFTER UPDATE AS declare @siswa_id int , @siswa_nama varchar (50), @siswa_alamat varchar (50), @aktifitas varchar (100); select @siswa_id=i.siswa_id from inserted i; select @siswa_nama=i.siswa_nama from inserted i; select @siswa_alamat=i.siswa_alamat from inserted i; if update (siswa_nama) set @aktifitas= 'Mengubah data siswa' ; if update (siswa_nama) set @aktifitas= 'Mengubah data siswa' ; insert into siswa_log(siswa_id,siswa_nama,siswa_alamat,aktifitas,waktu) values (@siswa_id,@siswa_nama,@siswa_alamat,@aktifitas,getdate()); |
Ubah salah satu data di table siswa
1
| UPDATE siswa set siswa_nama= 'ipung' where siswa_id=8; |
Begini hasilnya
Keempat : Mencatat setiap aktifitas delete ke table log
1
2
3
4
5
6
7
8
9
| CREATE TRIGGER triggerAfterdelete on siswa AFTER DELETE AS declare @siswa_id int , @siswa_nama varchar (50), @siswa_alamat varchar (50), @aktifitas varchar (100); select @siswa_id=i.siswa_id from deleted i; select @siswa_nama=i.siswa_nama from deleted i; select @siswa_alamat=i.siswa_alamat from deleted i; set @aktifitas= 'Menghapus data siswa' ; insert into siswa_log(siswa_id,siswa_nama,siswa_alamat,aktifitas,waktu) values (@siswa_id,@siswa_nama,@siswa_alamat,@aktifitas,getdate()); |
Hapus salah satu data di table siswa :
1
| DELETE FROM siswa where siswa_id=8; |
Begini hasilnya
No comments:
Post a Comment