DELETE Data Transaksi
Untuk proses DELETE, sama seperti proses INSERT, trigger akan berjalan FOR EACH ROW, namun row yang sedang kita hapus ada di variable OLD. Logikanya adalah seperti ini,
- Setiap kali ada penghapusan data transaksi barang masuk, maka field stok barang di table items akan kita kurangi,
- Sebaliknya, setiap kali ada penghapusan data transaksi barang keluar, maka field stok barang di table items akan kita tambahkan,
maka trigger DELETE akan seperti ini,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| mysql> delimiter $$ mysql> drop trigger if exists trg_transaction_details_after_delete$$ Query OK, 0 rows affected (0.06 sec) mysql> -- ----------------------------- mysql> -- after delete trigger mysql> -- ----------------------------- mysql> create trigger trg_transaction_details_after_delete -> after delete on transaction_details -> for each row -> begin -> -- ----------------------------- -> -- ambil jenis transaksi -> -- ----------------------------- -> declare tipe varchar (20); -> set tipe = ( -> select tt.code -> from transactions tr -> join transaction_types tt on tr.type_id=tt.id -> where tr.id=old.trans_id -> ) ; -> -- ----------------------------- -> -- update sesuai jenis transaksi -> -- ----------------------------- -> update items -> set quantity_on_hand -> = quantity_on_hand -> + case when tipe= 'IN' then -old.quantity -> when tipe= 'OUT' then old.quantity -> else 0 end -> where items.id=old.item_id ; -> end $$ Query OK, 0 rows affected (0.23 sec) mysql> delimiter ; mysql> |
Simpulan
Setelah kita perhatikan hasil test di atas, maka proses pengerjaan coding di aplikasi akan jauh lebih mudah karena tidak perlu lagi memikirkan code untuk mengubah status stok barang, karena perubahan status stok barang seluruhnya sudah ditangani oleh trigger yang kita buat ini.
No comments:
Post a Comment