Download DML trigger - Telkom University

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
TRIGGER
(Statement & Row Trigger)
Program Studi D3 Manajemen Informatika – Fakultas Ilmu Terapan
Disusun oleh:
Elis Hernawati, S.T, M.KOM
Pramuko Aji, S.T, M.T
[email protected]
[email protected]
Tujuan Pembelajaran
1. Mampu menjelaskan statement dan row level trigger
2. Mampu mendemokan cara membangun statement
dan row level trigger
3. Mampu menjelaskan dan mendemokan manajemen
trigger
Pendahuluan
Trigger merupakan blok PL/SQL yang memiliki fungsi
hampir sama dengan procedure maupun function.
Hanya saja, jika procedure atau function dijalankan
secara eksplisit lewat pemanggilan procedure atau
function tersebut, sedangkan untuk trigger, dijalankan
secara implisit melalui operasi insert, delete atau
update.
Manfaat Trigger
• Mengatur integritas dari constraint yang kompleks yang tidak
mungkin ditangani oleh sintaks-sintaks pembuatan tabel.
• Mencegah transaksi yang tidak valid
• Memperbaiki keamanan database dengan menyediakan audit
yang lebih kompleks mengenai informasi perubahan database
dan user siapa yang melakukan perubahan.
• Secara otomatis memberi sinyal program lain untuk melakukan
sesuatu jika isi tabel diubah.
Keterbatasan Trigger
• Tidak dapat menggunakan perintah commit dan
rollback, selain itu juga tidak dapat memanggil
procedure, function atau package yang
menggunakan perintah commit dan rollback.
• Tidak dapat diimplementasikan pada kolom pada
suatu tabel yang memiliki constraint, jika pada
akhirnya akan menyebabkan pelanggaran constraint.
Biasanya terjadi akibat modifikasi pada primary key.
Jenis-jenis Trigger
1. Application trigger: dibangkitkan ketika terjadi event
pada aplikasi (Oracle Form Developer)
2. Database Trigger: dibangkitkan ketika terjadi event
pada data (contoh: DML) atau event pada system
(contoh: logon, shutdown, dll) pada schema
database.
DML trigger
DML trigger merupakan jenis trigger yang dieksekusi ketika terjadi operasi
DML (insert, update, delete), dibagi menjadi dua yaitu :
1. Row-level Trigger
• Dieksekusi untuk setiap row yang dimanipulasi pada suatu transaksi.
Artinya tidak akan dieksekusi jika tidak ada row data yang berubah
• Penerapan trigger ini ditunjukkan oleh adanya klausa FOR EACH ROW.
2. Statement Trigger
• Statement-level trigger dieksekusi satu kali pada saat transaksi, tanpa
memperhatikan jumlah row yang terlibat.
• Secara default trigger yang dibuat adalah statement-level trigger.
• Akan selalu dieksekusi walaupun tidak ada row data yang berubah
Struktur Dasar Trigger
Trigger timing
CREATE [or replace] TRIGGER nama_trigger
( BEFORE|AFTER )
( INSERT|UPDATE [OF nama_kolom,..]|DELETE )ON
nama_table
[FOR EACH ROW]
[WHEN (kondisi)]
DECLARE
Deklarasi tipe data
BEGIN
Trigger body
END;
Trigger event
Trigger type
Trigger restriction
Penjelasan Struktur Dasar Trigger
Bagian Trigger
Trigger timing
Keterangan
Menunjukkan kapan trigger akan dieksekusi relatif
terhadap suatu event.
Trigger event
Jenis manipulasi data pada tabel/view yang
menyebabkan trigger terpacu.
Trigger restriction
(optional)
Trigger type
Batasan yang mengizinkan pengeksekusian trigger.
Trigger body
Berisi algoritma aksi yang akan dilakukan.
Berapa kali body trigger dieksekusi.
Nilai yang mungkin
BEFORE
AFER
INSTEAD OF
INSERT
UPDATE
DELETE
CREATE
ALTER
DROP
STARTUP
SHUTDOWN
LOGOFF
LOGON
SERVERERROR
SUSPEND
…
When (boolean value)
ROW-level
STATEMENT-level
Blok PL/SQL
Contoh
Statement Trigger
1. Buatlah trigger bernama
TRG_DEPARTMENT_NAME
_UPDATE untuk mencegah
perubahan data department
name di tabel departments
pada saat hari dan jam kerja.
Asumsikan hari kerja adalah
senin s.d jumat.
2. Jalankan SQLPlus
3. Login ke hr
4. Definisinikan nama trigger
yang akan dibuat!
5. Tentukan trigger timing dan
event-nya
6. Tuliskan isi/ body dari trigger
Referensi Nilai Kolom di Trigger
Dalam trigger, dikenal istilah alias atau referensi, yaitu sejenis variabel yang
menyimpan nilai dari suatu kolom dalam tabel. Alias terbagi menjadi dua,
yaitu:
1. Untuk mendapatkan data baru pada sebuah tabel di dalam trigger body,
dapat dilakukan dengan perintah sebagai berikut:
:new.nama_kolom
2. Untuk mendapatkan data lama pada sebuah tabel di dalam trigger
body, perintah yang digunakan:
:old.nama_kolom
Contoh
Row Trigger
1. Buat trigger TRG_DML_WARNING
untuk menampilkan warning pada
saat terjadi proses DML pada tabel
kota dengan menampilkan detail
perubahan datanya (data lama dan
baru) dengan memanfaatkan
referensi (OLD dan NEW)!
2. Login ke system
3. Definisinikan nama trigger yang akan
dibuat!
5. Tentukan trigger timing dan event-nya
6. Tambahkan perintah FOR EACH
ROW setelah trigger timing dan event
7. Tuliskan isi/ body dari trigger
Manajemen Trigger
Ada 4 cara untuk mengaktifkan (enable) dan me-nonaktifkan (disable) suatu trigger di
database Oracle, yaitu:
1. Mengaktifkan (enable) sebuah trigger
2. Mengaktifkan semua (enable all) trigger
3. Menonaktifkan (disable) sebuah trigger
4. Menonaktifkan semua (disable all) trigger
Mengaktifkan (enable) Sebuah Trigger
1.
Sintak dasar untuk mengaktifkan sebuah (satu) trigger di database Oracle:
ALTER TRIGGER nama_trigger ENABLE;
Contoh:
ALTER TRIGGER before_insert_dep ENABLE;
Perintah di atas akan meng-aktifkan trigger BEFORE_INSERT_DEP
2.
Sintak dasar untuk mengaktifkan semua trigger disebuah tabel di database
ALTER TABLE nama_table ENABLE ALL TRIGGERS;
Contoh :
ALTER TABLE dept ENABLE ALL TRIGGERS;
Perintah di atas akan mengaktifkan semua trigger di tabel dept
Menonaktifkan (disable) Sebuah Trigger
1.
Sintak dasar untuk menonaktifkan sebuah (satu) trigger disebuah tabel di database Oracle:
ALTER TRIGGER nama_trigger DISABLE;
Contoh:
ALTER TABLE dept DISABLE ALL TRIGGERS;
Perintah diatas menonaktifkan semua trigger di tabel DEPT
2.
Sintak dasar untuk me-nonaktifkan semua trigger di sebuah tabel di database Oracle:
ALTER TABLE nama_table DISABLE ALL TRIGGERS;
Contoh :
ALTER TABLE dept DISABLE ALL TRIGGERS;
Perintah diatas menonaktifkan semua trigger di tabel DEPT.
Referensi
• Feuerstein, Steven, dan Bill Pribyl. Oracle PL/SQL programming. Sebastopol, CA: O'Reilly,
2009. Print.
• Urman, Scott, Ron Hardman, dan Michael McLaughlin. Oracle Database 10g PL/SQL
Programming. New York: McGraw-Hill/Osborne, 2004. Print.
• Srivastava, Tulika, dan Glenn Stokol. Oracle Database 10g: Develop PL/SQL Program Units
2nd Edition. Boston: Oracle Publisher, 2006.
• Dedy Rahman Wijaya. Modul Praktikum Pemrograman Basis Data. Universitas Telkom, 2014.