Oracle Apex 13 - Trigger di PL/SQL
Assalamu'alaikum
Selamat pagi, salam database. Gimana puasanya hari ini temen-temen? Semoga lancar semua ya. Walaupun ramadhan kali ini berbeda dari ramadhan di tahun-tahun biasanya, kita pasti bisa lewati masa-masa sulit ini ya insya Allah. Malam ini saya ingin melanjutkan kembali pembahasan tentang PLSQL di oracle. Pembahasan kali ini yaitu tentang Trigger. Apa itu trigger dan bagaimana penggunaannya pada query di oracle? Langsung saja berikut pembahasannya.
Trigger di PLSQL
Trigger pada PLSQL adalah suatu mekanisme untuk menjalankan program otomatis yang kita siapkan ketika perintah query tertentu dijalankan. Trigger biasanya sering digunakan sebagai alert untuk menampilkan error atau juga sering digunakan untuk menjalankan log daily pencatatan database.
Sama seperti pembuatan procedure dan function di pembahasan sebelumnya, trigger pada PLSQL juga dibuat dengan menggunakan SQL command pada menu oracle. Bedanya dengan procedure adalah trigger tidak di panggil oleh query dan tidak memiliki nilai balik. Trigger akan muncul atau jalan secara otomatis, jika kondisi query memiliki nilai sesuai dengan trigger yang kita siapkan.
Trigger Alert Insert / Update Database
Langsung saja, disini saya ingin mencontohkan fungsi trigger yang pertama yaitu sebagau alert insert atau update database. Semisal disini saya tidak ingin terjadinya proses insert atau update tabel barang dengan panjang nama barang yang kurang dari 3 misalnya. Maka disini saya bisa membuat trigger query PLSQL sebagai berikut.
CREATE OR REPLACE TRIGGER Trigger_Barang BEFORE INSERT OR UPDATE ON BARANG FOR EACH ROW DECLARE BEGIN IF length (:new.Nama_Barang) < 3 THEN raise_application_error(-20015, 'Panjang NAME tidak boleh kurang dari tiga'); END IF; END; |
Untuk membuat trigger, kita membutuhkan keterangan :
- apakah akan di letakan pada before atau after (insert, update dan delete)
- trigger akan bereaksi ketika action terjadi pada tabel apa?
- dan for each row digunakan untuk action trigger apa yang terjadi pada setiap attribute tabel tersebut.
Dan untuk actionnya kita letakan pada declare condition dan paga begin kita buatkan program trigger sesuai yang kita inginkan. Dalam hal ini, saya menggunakan algoritma If dengan kondisi jika nama barang kurang dari 3, maka action apa yang akan terjadi.
Jika kita jalankan query pembuatan trigger diatas, maka hasilnya ketika kita ingin insert atau update data pada tabel barang, jika attribute nama barang kurang dari 3 akan memunculkan alert seperti contoh berikut ini.
Tapi kalo nama barangnya 3 atau lebih, maka hasilnya data yang kita insert akan berhasil.
Hal ini juga berlaku untuk insert data menggunakan tampilang GUI atau non-sql query. Jika kita insert data kurang dari 3 panjang karakter, maka hasilnya pop up trigger akan muncul dan data tidak akan di insert kedalam database.
Trigger Membuat Tabel Log Otomatis ketika Update dan Delete Data
Next kita coba buat trigger selanjutnya yaitu membuat trigger membuat tabel log otomatis ketika ada data yang di update dan delete. Log tabel yang saya maksud disini sebenernya bukan log juga sih tapi lebih ke log history data yang telah di update atau delete. Jatuhnya seperti backup data setelah user melakukan update atau delete. Langsung saja, kita akan buat trigger nya namun kali ini kita akan buat dengan mode gui atau object browser agar kalian lebih memahaminya juga.Untuk membuat trigger di mode object browser caranya cukup mudah, yaitu kita tambahkan pada ikon plus di pojok kanan atas, lalu klik pada trigger.
Selanjutnya, kita buat triggernya untuk tabel yang mana. Karena disini saya ingin membuat trigger untuk tabel barang, maka tabel namenya kita pilih tabel barang. Setelah itu kita klik next.
Pada pengisian form ini sama seperti pada sql command sebelumnya. Yaitu kita isikan nama triggernya, lalu isikan before atau after pada optionnya apakah insert, update atau delete. Disini karena saya ingin membuat log untuk update terlebih dahulu, maka saya pilih yang option update. Dan jangan lupa untuk for each rownya agar diceklis ya. Dan untuk perintah triggernya kita isikan manual pada script trigger body. Setelah itu klik next.
Bagi yang mau script triggernya kalian tinggal copy aja script berikut ini.
INSERT INTO BARANG_LOG(Kode_Barang, Nama_Barang, Satuan_Barang, Stok_Barang, Tanggal, Type) VALUES (:OLD.Kode_BARANG, :OLD.Nama_Barang, :OLD.Satuan_Barang, :OLD.Stok_Barang, CURRENT_TIMESTAMP, 'UPDATE'); |
Maka jika pilihan object browsernya kita arahkan ke list trigger, trigger yang kita buat dengan nama trigger_update_barang tadi akan muncul di list trigger.
Jika sudah muncul trigger pada list triggernya, maka ketika kita ingin update data, semisal disini saya ingin update data atau row sikat gigi menjadi pasta gigi.
Maka tabel log baru akan terbentuk dari hasil trigger yang kita buat tadi. Isi datanya adalah data lama sebelum data sikat gigi diubah menjadi data pasta gigi. Dan sebagai keterangan disini saya memberikan kolom attribute baru yaitu type untuk membedakan apakah data yang masuk ke tabel barang_log adalah tabel hasil update atau tabel hasil delete yang nanti kita akan buat juga.
Sekarang setelah berhasil pada tabel update, kita buat juga trigger ketika user ingin delete data pada tabel barang. Step-stepnya sama seperti trigger yang update data. Bedanya hanya di scriptnya dan pemilihan optionnya saja. Yaitu menggunakan option delete. Dan di scriptnya hanya berbeda pada kolom type nya yaitu informasi yang menandakan trigger ini untuk data yang telah di delete dari tabel barang.
Berikut script triggernya.
INSERT INTO BARANG_LOG(Kode_Barang, Nama_Barang, Satuan_Barang, Stok_Barang, Tanggal, Type) VALUES (:OLD.Kode_BARANG, :OLD.Nama_Barang, :OLD.Satuan_Barang, :OLD.Stok_Barang, CURRENT_TIMESTAMP, 'DELETE'); |
Demikian pembahasan mengenai trigger di PLSQL pada oracle application express. Semoga membantu dan memudahkan pembaca untuk mempelajari trigger pada PLSQL. Sekian dari saya, jika ada yang ingin di tanyakan bisa lemparkan di kolom komentar. Terima kasih sudah berkunjung, sampai berjumpa di pembahasan oracle database selanjutnya. Terima kasih.
0 komentar:
Post a Comment