Wednesday 12 September 2012

Trigger SQL dengan Inserted dan Deleted Table Bag. II

 

Trigger SQL

Merupakan lanjutan belajar menggunakan trigger dari pembahasan sebelumnya


Triger adalah kode perintah atau prosedur yang dieksekusi oleh SQL Server sebagai respons dari beberapa tindakan yang dijalankan yaitu INSERT, DELETE dan UPDATE.
Jadi saat ada perintah Insert, Delete dan Update trigger secara otomatis akan dijalankan.
Untuk lebih jelasnya langsung kita mulai mencobanya.
Misalnya dalam stok barang di gudang ada tabel dibawah ini. 
Pada saat ada transaksi penambahan barang masuk pada table Trans_Masuk maka secara otomatis trigger akan memerintahkan table stock barang menambahkan data barangnya.
Demikian juga dengan pengurangan stok barang dilakukan secara otomatis saat ada transaksi keluar.
Buat trigger di tabel Trans_Masuk

CREATE TRIGGER UpdateStock ON Trans_Masuk
FOR INSERT,DELETE, UPDATE AS
BEGIN
 
   declare @Kodebarang as varchar(50)
   declare @Qty as int
   
   /*Kurangi data stock jika terjadi Delete atau Update data */
   Select @Kodebarang = Kodebarang,@Qty = Qty  from Deleted
   Update Stock_Barang Set Qty = Qty - @Qty  Where KodeBarang = @KodeBarang
    
    /*Cek apakah data barang sudah ada di tabel stock atau belum */
   Select @Kodebarang = Kodebarang,@Qty = Qty  from inserted
   
   if (select count(*) from Stock_Barang Where Kodebarang = @Kodebarang) = 0
Insert into Stock_Barang Select KodeBarang,Qty from Inserted
   else
   Update Stock_Barang Set Qty = Qty + @Qty  Where KodeBarang = @KodeBarang
END

Mari kita coba dengan menambahkan beberapa data

1. Tambahkan kodebarang BRG-004 sejumlah 25 pcs ke tabel Trans_Masuk
insert into Trans_Masuk values ('IN/1209/005','BRG-004',25,'PCS')

Kita lihat hasilnya pada table stock_barang akan bertambah 25 pcs.



2. Edit KodeBarang BRG-004 dari 25 PCS menjadi 30 PCS
Update Trans_Masuk Set Qty=30 Where KodetransIn='IN/1209/005' 
AND KodeBarang='BRG-004' AND Qty=25

Coba cek hasilnya berapa? Kalo stock nya menjadi 32 maka benar triggernya.



3. Tambahkan stock BRG-004 sebanyak 13 PCS
insert into Trans_Masuk values ('IN/1209/006','BRG-004',13,'PCS')

Jika hasilnya adalah 43 maka trigger berjalan benar

Semoga bermanfaat!

3 comments:
Write comments
  1. kalau data di delete kok stock barangnya tidak terupdate ya, mohon bantuannya gan

    ReplyDelete
  2. apa trigernya sudah dibuat? bisa disertakan? triggernya biar lebih jelas?!?

    jadi langkahnya create trigger di tabel transaksi. Pada saat data akan dihapus maka data stock akan berkurang otomatis dengan qty diambil dari tabel deleted.

    Select @Kodebarang = Kodebarang,@Qty = Qty from Deleted
    Update Stock_Barang Set Qty = Qty - @Qty Where KodeBarang = @KodeBarang

    ReplyDelete
  3. Permisi om, saya mau nanya, disini saya punya 2 table:
    table_1:
    ------------------------------------------------------
    id | perusahaan | pendapatan | pajak
    -----------------------------------------------------
    1 | CV. Makmur | 20.000.000 | .......
    2 | PT. Asia Jaya | 20.000.000 |.......
    3 | PT. DID | 40.000.000 |.......

    keterangan:
    id (int) (10)
    perusahaan (varchar)(30)
    pajak (int) (30)
    pendapatan (int)(30)

    Table_2:
    -------------------------------------------------------------
    id | code_perusahaan | parameter_pajak
    -------------------------------------------------------------
    1 | M20006 | 200.000
    2 | AJ 20007 | 200.000
    3. | DID20008 | 200.000

    keterangan:
    id (int)(10)
    code_perusahaan (varchar)(20)
    parameter_pajak (int)30)

    Pertanyaannya:
    Saya mau melakukan pembagian antara kolom "penghasilan(table_1)" dibagi angka pada kolom "parameter_pajak(table_2)". terus hasilnya akan terinput otomatis ke kolom "pajak(table_1)".
    Terus setiap melakukan input/update kolom "penghasilan (table_1)" atau melakukan peruabahan data di "parameter_pajak (table_2)" maka otomatis hasil nilai di kolom "pajak (table_1)" juga akan ikut berubah otomatis.

    Mohon pencerahannya om...makasih sebelumnya..

    ReplyDelete