UPDATE (Edit) Data Transaksi
Untuk proses UPDATE, sama seperti proses INSERT dan DELETE, trigger akan berjalan FOR EACH ROW, namun sedikit lebih rumit, row ebelum proses update, atau data original tersimpan di variable OLD, dan row yang baru tersimpan di variableNEW. Logikanya adalah seperti ini,
- Setiap kali ada update data transaksi barang masuk, maka field stok barang di table items akan kita kurangi dengan kuantitas lama kemudian kitatambahkan dengan kuantitas yang baru,
- Sebaliknya, setiap kali ada update data transaksi barang keluar, maka field stok barang di table items akan kita tambahkan dengan kuantitas lama kemudian kitakurangi dengan kuantitas yang baru,
maka trigger UPDATE 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
38
39
40
41
42
43
44
45
46
47
48
49
50
| mysql> delimiter $$ mysql> mysql> drop trigger if exists trg_transaction_details_after_update$$ Query OK, 0 rows affected (0.06 sec) mysql> -- ----------------------------- mysql> -- after update trigger mysql> -- ----------------------------- mysql> create trigger trg_transaction_details_after_update -> after update 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 -> -- => kurangi dengan old quantity -> -- ----------------------------- -> 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 ; -> -- ----------------------------- -> -- update sesuai jenis transaksi -> -- => tambahkan dengan new quantity -> -- ----------------------------- -> update items -> set quantity_on_hand -> = quantity_on_hand -> + case when tipe= 'IN' then new.quantity -> when tipe= 'OUT' then -new.quantity -> else 0 end -> where items.id=new.item_id ; -> end $$ Query OK, 0 rows affected (0.14 sec) mysql> delimiter ; mysql> |
No comments:
Post a Comment