Jumat, 09 Mei 2014

PENGERTIAN TRIGGER DAN PENGGUNAAN PADA SQL


Sebuah trigger merupakan kode prosedural yang akan secara otomatis dieksekusi akibat dipicu oleh seuah event / kejadian pada suatu Tabel. Trigger dapat mencegah akses terhadap data yang spesifik, melakukan logging atau melakukan audit perubahan data. Trigger digunakan untuk pemrosesan kondisi statemen DML (Data Manipulation Language) seperti INSERT, DELETE dan UPDATE, Namun trigger tidak dapat digunakan dalam statemen SELECT.

Pengertian Trigger pada SQL Server

Terdapat tiga kejadian (event) umum yang dapat menyebabkan trigger dipicu :
– INSERT, berarti trigger dijalankan ketika terdapat sejumlah data baru yang diinput
– UPDATE, berarti trigger dijalankan ketika terdapat data / record yang diubah
– DELETE, berarti trigger dijalankan ketika terdapat data / record yang dihapus
Manfaat dari penggunaan trigger :
1.     Trigger merupakan salah satu mekanisme untuk menjalankan aturan bisnis dan menjaga integritas data dalam sebuah basis data. Mekanisme yang lainnya adalah penggunaan CONSTRAINT
2.     Trigger dapat mengevaluasi status dari sebuah tabel sebelum dan sesudah terjadi perubahan data dan melakukan aksinya sesuai perbedaan yang terjadi
3.     Trigger dapat melakukan perubahan cascade melalui melalui relasi tabel pada database, akan tetapi perubahan ini akan lebih efisien jika dieksekusi menggunakan referential integrity constraints.
4.     Trigger dapat melakukan pencegahan akses atas data yang kompleks dibanding dengan menggunakan CHECK CONSTRAINT
5.     Tidak seperti pada Check Constraint, Trigger dapat mereferensikan kolom / field dalam tabel yang berbeda.
6.     Dan lupa lagi
Syntax membuat Trigger :
CREATE TRIGGER {Nama_Trigger}
ON {Nama_Table}
FOR {DELETE | INSERT | UPDATE}
AS
{SQL Statement}
Syntax menghapus Trigger :
DROP TRIGGER {Nama_Trigger}
ALTER TRIGGER {Nama_Trigger}
ON [Nama_Table}
FOR {DELETE | INSERT | UPDATE}
AS
{SQL Statement}
Syntax mendapatkan informasi mengenai trigger :
sp_helptext {Nama_Trigger}
sp_help {Nama_Trigger}
sp_columns {Nama_Trigger}
Contoh penggunaan :
DROP TRIGGER info
CREATE TRIGGER info
ON BARANG
FOR INSERT
AS
PRINT ‘Data Telah Ditambahkan ke tabel Barang…!’

Membuat trigger di SQL Server 2005


Trigger artinya kode SQL yang dikerjakan oleh DBMS ketika suatu kejadian terjadi.
Misalnya ada tabel barang dan tabel pembelian, untuk lebih jelasnya bisa dilihat pada gambar dibawah ini. dalam tabel barang tersebut ada nama barang dan jumlah stock , IDEnya adalah ketika tabel pembelian ditambahkan, jumlah stock barang akan terupdate secara otomatis.misalnya ketika barang A dibeli sejumlah 3 buah maka nanti stock barang akan bertambah 3 secara otomatis. proses tersebut bisa dilakukan dgn trigger

menurut MSDN, syntac dari trigger adalah sebagai berikut
Syntax
CREATE TRIGGER trigger_name 
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column ) 
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
biar lebih mengerti, kita mulai dengan contoh.. jadi kita butuh membuat 2 tabel tersebut di SQL server 2005, script sebagai berikut
create table BARANG
(
BAR_ID int not null,
BAR_NAMA varchar(255) not null,
BAR_STOCK int null
default 0,
constraint PK_BARANG primary key (BAR_ID)
)
go

create table PEMBELIAN
(
PEM_ID int not null,
BAR_ID int null ,
PEM_JUMLAH int null ,
constraint PK_PEMBELIAN primary key (PEM_ID)
)
go

create index RELATION_FK on PEMBELIAN (BAR_ID)
go

alter table PEMBELIAN
add constraint FK_PEMBELIA_RELATION_BARANG foreign key (BAR_ID)
references BARANG (BAR_ID)
go

INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (1,’AQUA’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (2,’TOTAL’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (3,’AQUADES’); 

setelah anda menjalankan script tersebut, maka anda akan mempunyai 2 tabel, yaitu tabel barang dengan isi 3 buah data, dan tabel pembelian dengan data masih kosong.3 data di tabel barang tersebut secara defaut stocknya adalah 0
kemudian saatnya kita buat trigger sehingga ketika kita menambahkan data di tabel pembelian dengan jumlah pembelian barang tertentu, maka stock di tabel barang akan bertambah sesuai dengan barang yg dibeli, syntac trigger tersebut adalah sebagai berikut
create trigger tambahStockbarang on pembelian
for insert
as
update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id

arti dari kode tersebut adalah sebagai berikut
create trigger tambahStockbarang on pembelian
membuat trigger dengan nama tambahStockBarang dimana trigger tersebut akan terpicu jika ada perubahan di tabel pembelian
for insert
as

perubahan tersebut adalah penambahan(insert) di tabel pembelian , selain penambahan bisa juga diisi dengan perubahan(update) atau penghapusan(delete)
for disini juga bisa rubah isinya jadi after atau instead of . perbedaanya adalah waktu trigger dikerjakan, biasaya yg sering digunakan adalah for
update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id

ini adalah kode yg dikerjakan ketika kejadian trigger terpicu, kode diatas bertujuan merubah nilai bar_stock pada tabel barang dengan menambahkan nilai bar_stock yg sekarang dengan jumlah barang yg dibeli (pem_jumlah). perhatikan disini ada tabel yang bernama inserted, tabel tersebut merupakan tabel logika yg digunakan untuk menyimpan data yang memicu terjadinya trigger, dalam hal ini nilai data yg dimasukkan(insert) kedalam tabel pembelian, selain inserted, tabel logika lainnya adalah deleted, tabel logika ini digunakan untuk trigger yg terpicu dengan kejadiandelete
kita coba masukkan kode berikut
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (1,1,4);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (2,3,2);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (3,1,1);

arti kode tersebut
pem_id haruslah beda karena merupakan primary key
beli aqua(kode bar_id=1) sebanyak 4
beli aquades (kode bar_id=3) sebanyak 2
beli aqua lagi sebanyak 1
sehingga secara keseluruhan yg dibeli aqua sebanyak 5 dan aquades sebanyak 2
karena default nilai stock barang adalah 0, maka seharusnya nilai aqua 5 dan aquades 2 adalah jumlah stock barang sekarang ini
dan kita lihat data barang… walah

Trigger ketika Delete

ide dari trigger yang akan saya utarakan disini adalah supaya ketika data di tabel pembelian terhapus, otomatis data jumlah stock barang dari barang yang terhapus di tabel pembelian tadi berkurang. kode triggernya seperti ini
create trigger kurangiStockbarang on pembelian
for 
delete
as
update b set b.bar_stock = b.bar_stock 
- d.pem_jumlah
from barang b join 
deleted d on b.bar_id = d.bar_id
sebenarnya hampir sama dengan kode trigger ketika penambahan barang baru, saya memberi tanda yang bercetak tebal adalah kode yang saya rubah dari kode trigger dari artikel pertama
perbedaan paling mencolok adalah untuk menangkap nilai dari tabel yang dihapus anda mengunakan tabel virtual yang bernama deleted.


sumber didapat : http://richmadiyanti25.wordpress.com/2013/04/25/penggunaan-trigger-dalam-sql/

0 komentar:

Posting Komentar