Tugas Basis Data Lanjut

6
TUGAS BASIS DATA LANJUT TOPIK “TRIGGER” Nama : Ari Pratama Putra NIM : 1142101191 PROGRAM STUDI TEKHNIK INFORMATIKA FAKULTAS SAINS DAN ILMU KOMPUTER UNIVERSITAS KRISTEN IMMANUEL YOGYAKARTA 2015

description

Tugas BDL

Transcript of Tugas Basis Data Lanjut

TUGAS BASIS DATA LANJUT

TOPIK TRIGGER

Nama : Ari Pratama Putra

NIM : 1142101191

PROGRAM STUDI TEKHNIK INFORMATIKA

FAKULTAS SAINS DAN ILMU KOMPUTER

UNIVERSITAS KRISTEN IMMANUEL YOGYAKARTA

2015Trigger adalah blok PL/SQL atau prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi sebuah event. Trigger merupakan store procedure yang dijalankan secara automatis saat user melakukan modifikasi data pada tabel. Modifikasi data yang dilakukan pada tabel yaitu berupa perintah INSERT, UPDATE, dan DELETE. INSERT , UPDATE dan DELETE bisa digabung jadi satu trigger yang dinamakan Multiple Trigger.

Tipe dari trigger adalah :

Application trigger : diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi

Database trigger : diaktifkan pada saat terjadi event yang berhubungan dengan data (seperti operasi DML) atau event yang berhubungan dengan sistem (semisal logon atau shutdown) yang terjadi pada sebuah skema atau database.

Trigger perlu dibuat pada saat :

Membentuk sebuah aksi tertentu terhadap suatu event Memusatkan operasi global

Trigger tidak perlu dibuat, jika :

Fungsionalitas yang diperlukan suatu ada pada Oracle server Duplikat atau sama dengan fungsi trigger yang lain.

Sintak penulisan dari database trigger, berisi komponen berikut :

1. Trigger timing :a. Untuk tabel : BEFORE, AFTERb. Untuk view : INSTEAD OF2. Trigger event : INSERT, UPDATE atau DELETE3. Nama tabel : yaitu nama tabel atau view yang berhubungan dengan trigger4. Tipe trigger : Baris atau Pernyataan (statement)5. klausa WHEN : untuk kondisi pembatasan6. trigger body : bagian prosedur yang dituliskan pada trigger

Trigger timing adalah waktu kapan trigger diaktifkan. Ada tiga macam trigger timing, yaitu :

BEFORE : trigger dijalankan sebelum DML event pada tabel AFTER : trigger dijalankan setelah DML event pada tabel INSTEAD OF : trigger dijalankan pada sebuah view.

Trigger event ada 3 kemungkinan : INSERT, UPDATE atau DELETE.Pada saat trigger event UPDATE, kita dapat memasukkan daftar kolom untuk mengidentifikasi kolom mana yang berubah untuk mengaktifkan sebuah trigger (contoh : UPDATE OF salary ... ). Jika tidak ditentukan, maka perubahannya akan berlaku untuk semua kolom pada semua baris.

Tipe trigger ada 2 macam, yaitu :

Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event. Statement trigger juga dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi.

Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event. Row trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.

Trigger body mendefinisikan tindakan yang perlu dikerjakan pada saat terjadinya event yang mengakibatkan sebuah trigger menjadi aktif.Keuntugan menggunakan Trigger

Trigger dapat digunakan untuk mengubah data sebelum proses INSERT dilakukan atau untuk memberikan nilai default, misalnya mengubah data diluar nilai yang diperbolehkan, contoh : jika ada pengisian nilai diatas 100, maka akan di jadikan 100.

Kita dapat menyimpan data suatu record ke tabel lain ( misalnya history) sebelum data tersebut diupdate atau di delete. Sehingga semua perubahan data dapat dilacak dari sejak data itu di buat

Struktur Trigger

Create TRIGGER nama trigger

{BEFORE | AFTER}

{INSERT | UPDATE | DELETE}

ON nama_tabel

FOR EACH NOW

Statement statement

Contoh Penggunaan: Trigger After DeleteBerikut adalah contoh penggunaan trigger untuk event setelah penghapusan (AFTER DELETE) pada table "tr_penjualan" - database phi_minimart. Langkah yang akan kita lakukan adalah sebagai berikut :

1. Kita akan membuat satu table audit dengan nama "tr_penjualan_hapus" yang berisi row-row yang dihapus dari table "tr_penjualan" dengan tambahan dua field, yaitu tanggal penghapusan (tgl_perubahan) dan user MySQL yang melakukan hal tersebut (nama_user).

Berikut adalah perintahnya :USEphi_minimart;CREATETABLE`tr_penjualan_hapus`LIKE`tr_penjualan`;ALTERTABLE`tr_penjualan_hapus`ADD ( `tgl_perubahan`DATETIME, `nama_user`VARCHAR(200) );2. Tahap berikutnya adalah membuat trigger yang akan melakukan populasi data yang dihapus dari "tr_penjualan" ke table "tr_penjualan_hapus".

Berikut adalah perintahnya :

DELIMITER|CREATETRIGGERhapus_tr_penjualanAFTERDELETE ONtr_penjualanFOR EACH ROWBEGININSERTINTOtr_penjualan_hapus ( tgl_transaksi, kode_cabang, kode_kasir, kode_item, kode_produk, jumlah_pembelian, tgl_perubahan, nama_user )VALUES ( OLD.tgl_transaksi, OLD.kode_cabang, OLD.kode_kasir, OLD.kode_item, OLD.kode_produk, OLD.jumlah_pembelian, SYSDATE(), CURRENT_USER );END;|

DELIMITER;

3. Setelah trigger di atas kita buat, sekarang saatnya kita melakukan pengujian. Coba hapus tiga row data dari table "tr_penjualan" dan lihat efeknya di table "tr_penjualan_hapus".

Jalankan perintah berikut :

DELETEFROMtr_penjualanLIMIT3;SELECT*FROMtr_penjualan_hapus;

Terlihat pada gambar di atas 3 row yang dihapus telah "pindah" ke table "tr_penjualan_hapus" dengan tambahan informasi waktu penghapusan dan user yang menghapus.

4. Selesai.