Trigger merupakan sekumpulan perintah atau syntax SQL yang akan secara otomatis dijalankan jika terjadi operasi tertentu dalam tabel atau view. Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel. Contoh penggunaannya seperti perubahan stok barang secara otomatis, pengimplementasian suatu sistem log, validasi atau verifikasi data agar data konsisten.
Nah pada postingan kali ini saya akan memberikan contoh soal mengenai trigger sekaligus dengan jawabannya. Baiklah tanpa panjang lebar lagi mari kita bahas dulu skenario soal kita, jadi sekarang silahkan perhatikan gambar struktur tabel yang ada dibawah ini:
Dari gambar diatas kita bisa lihat ada 4 tabel yang saling berelasi satu sama lain dimana tabel Pelanggan terhubung ke tabel Transaksi, tabel Transaksi terhubung ke tabel Detail, dan tabel Detail terhubung ke tabel Barang. Untuk penggunaan trigger disini sendiri kita lihat dulu isi dari masing-masing tabel seperti yang ada pada gambar dibawah ini:
Dari gambar diatas kita bisa lihat bahwa setiap data pada TTRANSAKSI akan memiliki data detail pada TDETAIL, data pada kolom STOK BARANG pada TBARANG akan berkurang sesuai dengan banyaknya JUMLAH BELI yang ada pada TDETAIL, data kolom BAYAR pada TDETAIL akan terkalkulasi secara otomatis dari perhitungan JUMLAH BELI dikali HARGA BARANG yang ada pada TBARANG, dan kolom TOTAL BAYAR pada TTRANSAKSI akan terkalkulasi secara otomatis juga dari perhitungan kolom BAYAR pada TDETAIL sesuai dengan KD_TRANSAKSInya. Nah jadi kesimpulannya kita akan membuat 3 trigger untuk:
1. Mengurangi jumlah STOK_BARANG
2. Menghitung BAYAR
3. Menghitung TOTAL_BAYAR
Sebelum kita masuk pada pembahasan query terlebih dahulu saya sampaikan bahwa untuk proses insert (penginputan data) pada masing-masing tabel adalah sebagai berikut:
1. TBARANG = semua kolom harus diisi
2. TTRANSAKSI = semua kolom harus diisi KECUALI kolom TOTAL_BAYAR
3. TPELANGGAN = semua kolom harus diisi
4. TDETAIL = semua kolom harus diisi KECUALI kolom BAYAR
Baiklah sekarang kita langsung masuk pada querynya:
Kita akan bahas satu persatu bagian pada query diatas:
Bagian Pertama:
Bagian Kedua:
Bagian Ketiga:
Bagian Keempat:
Nah jadi demikianlah contoh pengerjaan soal trigger yang cukup sederhana, jika kamu masih penasaran dengan materi SQL Server yang lain maka kamu bisa dikunjungi juga postingan saya tentang Materi SQL Server ini dari SESI 1, SESI 2, SESI 3, SESI 5, SESI 7.
Dari gambar diatas kita bisa lihat bahwa setiap data pada TTRANSAKSI akan memiliki data detail pada TDETAIL, data pada kolom STOK BARANG pada TBARANG akan berkurang sesuai dengan banyaknya JUMLAH BELI yang ada pada TDETAIL, data kolom BAYAR pada TDETAIL akan terkalkulasi secara otomatis dari perhitungan JUMLAH BELI dikali HARGA BARANG yang ada pada TBARANG, dan kolom TOTAL BAYAR pada TTRANSAKSI akan terkalkulasi secara otomatis juga dari perhitungan kolom BAYAR pada TDETAIL sesuai dengan KD_TRANSAKSInya. Nah jadi kesimpulannya kita akan membuat 3 trigger untuk:
1. Mengurangi jumlah STOK_BARANG
2. Menghitung BAYAR
3. Menghitung TOTAL_BAYAR
Sebelum kita masuk pada pembahasan query terlebih dahulu saya sampaikan bahwa untuk proses insert (penginputan data) pada masing-masing tabel adalah sebagai berikut:
1. TBARANG = semua kolom harus diisi
2. TTRANSAKSI = semua kolom harus diisi KECUALI kolom TOTAL_BAYAR
3. TPELANGGAN = semua kolom harus diisi
4. TDETAIL = semua kolom harus diisi KECUALI kolom BAYAR
Baiklah sekarang kita langsung masuk pada querynya:
CREATE TRIGGER TR_INSERT_DETAILON TDETAILAFTER INSERTASBEGIN UPDATE TBARANG SET STOK_BARANG = STOK_BARANG - INSERTED.JUMLAH_BELI FROM TBARANG JOIN INSERTED ON TBARANG.KD_BARANG = INSERTED.KD_BARANG
UPDATE TDETAIL SET BAYAR = INSERTED.JUMLAH_BELI * HARGA_BARANG FROM TDETAIL JOIN TBARANG ON TDETAIL.KD_BARANG = TBARANG.KD_BARANG JOIN INSERTED ON TBARANG.KD_BARANG = INSERTED.KD_BARANG
UPDATE TTRANSAKSI SET TOTAL_BAYAR = TOTALBAYAR FROM TTRANSAKSI JOIN (SELECT KD_TRANSAKSI, SUM(BAYAR) AS 'TOTALBAYAR' FROM TDETAIL GROUP BY KD_TRANSAKSI) TDETAIL ON TTRANSAKSI.KD_TRANSAKSI = TDETAIL.KD_TRANSAKSI JOIN INSERTED ON TTRANSAKSI.KD_TRANSAKSI = INSERTED.KD_TRANSAKSI END
Kita akan bahas satu persatu bagian pada query diatas:
Bagian Pertama:
CREATE TRIGGER TR_INSERT_DETAIL ON TDETAIL AFTER INSERT AS BEGINSyntax ini adalah struktur pembuatan query dimana setiap katanya harus kamu tulis (dengan penyesuaian di beberapa bagian), CREATE TRIGGER artinya syntax yang menjelaskan bahwa yang akan dibuat adalah trigger ON TDETAIL artinya trigger ini akan disimpan sebagai objek pada TDETAIL dan trigger akan dijalankan jika ada aktivitas yang terjadi dalam tabel ini, AFTER INSERT artinya trigger ini akan dijalankan tepat setelah proses insert (kamu juga bisa menggunakan BEFORE, atau UPDATE, atau DELETE), AS BEGIN END artinya syntax untuk manipulasi ada akan disimpan pada bagian ini.
END
Bagian Kedua:
UPDATE TBARANG SET STOK_BARANG = STOK_BARANG - INSERTED.JUMLAH_BELI FROM TBARANG JOIN INSERTED ON TBARANG.KD_BARANG = INSERTED.KD_BARANGSyntax ini menjelaskan bahwa kita akan melakukan upadate pada tabel TBARANG dimana STOK_BARANG akan diubah dengan ketentuan STOK_BARANG (awal sebelum diinsert) dikurangi JUMLAH_BELI yang ada pada TDETAIL (TDETAIL disini diwakili oleh sebuah tabel dummy/bantu bawaan SQL Server yang mana tabel INSERTED ini fungsinya adalah menyimpan value/record terakhir yang diinsert pada tabel manapun), karena kita akan melakukan operasi tabel yang melibatkan lebih dari satu tabel maka kita harus mendeklarasikan JOIN antara TBARANG dan INSERTED, lalu kita tuliskan juga syarat untuk join dimana harus ada field yang sama sebagai penghubung.
Bagian Ketiga:
UPDATE TDETAIL SET BAYAR = INSERTED.JUMLAH_BELI * HARGA_BARANG FROM TDETAIL JOIN TBARANG ON TDETAIL.KD_BARANG = TBARANG.KD_BARANG JOIN INSERTED ON TBARANG.KD_BARANG = INSERTED.KD_BARANGSyntax ini menjelaskan bahwa kita akan melakukan upadate pada tabel TDETAIL dimana kolom BAYAR akan diubah dengan ketentuan JUMLAH_BELI yang ada pada tabel INSERTED dikali HARGA_BARANG yang ada di tabel TBARANG, sisanya hampir sama dengan syntax pada bagian kedua, bedanya disini kita menggabungkan 3 tabel sedangkan bagian kedua hanya dua tabel saja.
Bagian Keempat:
UPDATE TTRANSAKSI SET TOTAL_BAYAR = TOTALBAYAR FROM TTRANSAKSI JOIN (SELECT KD_TRANSAKSI, SUM(BAYAR) AS 'TOTALBAYAR' FROM TDETAIL GROUP BY KD_TRANSAKSI) TDETAIL ON TTRANSAKSI.KD_TRANSAKSI = TDETAIL.KD_TRANSAKSI JOIN INSERTED ON TTRANSAKSI.KD_TRANSAKSI = INSERTED.KD_TRANSAKSISyntax ini menjelaskan bahwa kita akan melakukan upadate pada tabel TTRANSAKSI dimana kolom TOTAL_BAYAR akan diubah dengan sebuah alias/varible bernama TOTALBAYAR dimana alias ini berasal dari SUB-QUERY yang dimulai dari SELECT sampai GROUP BY KD_TRANSAKSI (lihat syntax yang ada didalam kurung), setelah itu kitapun harus menggabungkan ketiga tabel yang terlibat dengan JOIN.
Nah jadi demikianlah contoh pengerjaan soal trigger yang cukup sederhana, jika kamu masih penasaran dengan materi SQL Server yang lain maka kamu bisa dikunjungi juga postingan saya tentang Materi SQL Server ini dari SESI 1, SESI 2, SESI 3, SESI 5, SESI 7.
Terimakasih telah berkunjung, semoga postingan ini dapat membantu dan ada manfaatnya, sampai jumpa di postingan selanjutnya, wassalamualaikum warohmatullohi wabarokatuh.
Post a Comment