Trigger adalah salah satu Transact-SQL code yang intinya secara otomatis mengeksekusi suatu task (insert, update dan delete) pada suatu object apabila ada DML(Data Manipulation language) yang dieksekusi pada object tertentu.....
supaya lebih mudah kita asumsikan ada 2 tabel yaitu table stock dan table transaksi penjualan. pada tabel stok terdapat nama barang dan stoknya. kemudian terjadi penjualan barang pada table transaksi penjualan , maka secara otomatis jumlah stock barang pada table barang akan berkurang.
untuk lebih mudah , mari kita coba untuk membahas bagaimana cara membuat trigger.
sebelumnya kita create dulu Database dan beberapa tabel untuk uji coba trigger
(!) note : Pembuatan database yang akan kita gunakan disini semata-mata untuk mempermudah dalam memahami
Querynya :
Databasenya
CREATE DATABASE TOKO_PINTAR
Tabelnya
CREATE DATABASE TOKO_PINTAR USE TOKO_PINTAR GO CREATE TABLE Product ( kode_product INT Identity (20110,1), nama_barang Varchar(100), stok int ) CREATE TABLE Pembelian ( kode_pembelian INT Identity (11020,1), nama_barang VARCHAR (100), kode_product INT, jumlah INT ) CREATE TABLE Penjualan ( kode_penjualan INT Identity (11020400,1), nama_barang VARCHAR (100), kode_product INT, jumlah INT )
USE TOKO_PINTAR GO INSERT INTO Product VALUES ('Flashdisk 16 GB','20'), ('Processor Quad Core','30') , ('Mouse','15')hasilnya
nah sekarang mari kita coba untuk membuat Trigger pada table Pembelian
USE TOKO_PINTAR GO Create trigger tr_pembelian on pembelian for insert,update as IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang) update PD set PD.stok = PD.stok + i.jumlah from Product PD join inserted i on PD.nama_barang= i.nama_barang ELSE INSERT Product (nama_barang ,stok)SELECT i3.nama_barang,i3.jumlah FROM inserted i3 UPDATE pembelian SET kode_product = P.kode_product FROM Product P JOIN pembelian ON pembelian.nama_barang = P.nama_barangkita coba untuk Insert Row baru namun dengan nama barang yang sudah ada di tabel Product
INSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Flashdisk 16 GB','2')
mari kita lihat hasilnya
sekarang kita coba untuk insert barang baru lewat tabel pembelian
INSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Hardisk Eksternal 1 TB','35')
berikut adalah trigger untuk penjualan
USE TOKO_PINTAR GO CREATE trigger tr_penjualan on penjualan for insert,update as IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang) update PD set PD.stok = PD.stok - i.jumlah from Product PD join inserted i on PD.nama_barang= i.nama_barang ELSE SELECT 'barang dengan nama '+i2.nama_barang + ' tidak dapat ditemukan dalam database' FROM inserted i2 UPDATE penjualan SET kode_product = P.kode_product FROM Product P JOIN penjualan ON penjualan.nama_barang = P.nama_barang
Sekarang mari kita insert penjualan
INSERT INTO Penjualan(nama_barang,jumlah) VALUES('Flashdisk 16 GB','10')
nah..berikut mari kita lihat hasilnya
testing comment ah...sukses selalu...
ReplyDeletesemangkaaaa......