Welcome

Welcome, thanks to look my blog

Wednesday 17 February 2016

Penggunaan Trigger di SQL Server

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