TRIGGER
6/25/2016PemrogramanBasisData
1
PENDAHULUAN
 Trigger adalah blok PL/SQL yang disimpan dalam
database dan akan diaktivasi ketika Anda
melakukan statement-statement SQL (Insert,
Update, dan Delete) pada sebuah table.
 Implementasi: mengeset/mengubah nilai kolom
suatu table sehingga validasi nilai dari table
tersebut akan terjaga
6/25/2016PemrogramanBasisData
2
TRIGGER
 Trigger tersimpan berdiri sendiri, bukan merupakan
bagian dari package
 Trigger tidak mempunyai parameter
 Dipanggil pada saat DML, database
startup/shutdown, dan pada operasi DDL tertentu
6/25/2016PemrogramanBasisData
3
JENIS-JENIS TRIGGER
Trigger digunakan untuk:
 Maintain integritas konstrain yang komplek
 Informasi auditing (siapa yang melakukan
perubahan dan kapan)
 Memanggil program yang lain
6/25/2016PemrogramanBasisData
4
DML TRIGGERS
 Dijalankan sebelum (before) atau setelah (after)
INSERT, UPDATE, DELETE
6/25/2016PemrogramanBasisData
5
SYSTEM TRIGGERS
 Dijalankan setelah operasi system, seperti startup,
shutdown, dan pembuatan object.
6/25/2016PemrogramanBasisData
6
MEMBUAT TRIGGER
 Oracle telah menyediakan statement CREATE
TRIGGER untuk membuat sebuah trigger yang
selanjutnya akan diaktivasi berdasarkan event
tertentu.
 Secara umum, event trigger terbagi menjadi dua,
yaitu BEFORE (sebelum) dan AFTER (sesudah).
6/25/2016PemrogramanBasisData
7
MEMBUAT TRIGGER
 Syntax Trigger:
6/25/2016PemrogramanBasisData
8
MEMBUAT TRIGGER
Keterangan:
 REPLACE digunakan untuk mengganti isi trigger
jika nama trigger yang dibuat sudah ada
sebelumnya
 BEFORE digunakan untuk mendeklarasikan bahwa
trigger yang dibuat itu akan dieksekusi sebelum
sebuah statement SQL dilakukan
 AFTER digunakan untuk mendeklarasikan bahwa
trigger yang dibuat itu akan dieksekusi setelah
sebuah statement SQL dilakukakan
 Statement yang dimaksud disini adalah statement
SQL dalam DML
6/25/2016PemrogramanBasisData
9
CONTOH
 Membuat trigger dengan nama tr_coba yang dapat
menampilkan teks ‘Table mhs telah di-
update’ setiap kali selesai (AFTER) melakukan
update terhadap table mhs.
6/25/2016PemrogramanBasisData
10
PENGARUH TRIGGER
 Untuk memeriksa trigger yang telah dibuat tersebut,
maka begitu dilakukan update terhadap table mhs,
maka hasil yang akan tampak adalah sbb:
6/25/2016PemrogramanBasisData
11
MEMBUAT DML TRIGGERS
Type-type dari DML Trigger
Category Values comments
Statement INSERT and/or DELETE and/or
UPDATE
Choose operation(s)
Timing BEFORE or AFTER Choose timing
Level FOR EACH ROW or statement
(omit FOR EACH ROW)
Once per DML statement,
or once for every row affected
6/25/2016PemrogramanBasisData
12
URUTAN DML TRIGGER DIJALANKAN
1. Sebelum statement level trigger
2. Untuk tiap row (for each row) yang terpengaruh
a. Sebelum row-level trigger
b. Operasi
c. Setelah row-level trigger
3. Setelah statement level trigger
6/25/2016PemrogramanBasisData
13
ALIAS DIDALAM TRIGGER
 Dalam trigger dikenal dengan istilah alias atau
referensi, yaitu sejenis variable yang menyimpan
nilai dari suatu kolom didalam table
 Alias tersebut terbagi menjadi dua yaitu :new dan
:old.
 Alias dituliskan didepan nama kolom yang akan
diambil nilainya
6/25/2016PemrogramanBasisData
14
ALIAS DIDALAM TRIGGER(2)
Terdapat tiga hal yang perlu dipahami pada saat
menggunakan alias didalam trigger:
1. INSERT
2. UPDATE
3. DELETE
6/25/2016PemrogramanBasisData
15
1. STATEMENT INSERT
 Hanya mempunyai alias :new, yaitu variable yang
menyimpan nilai-nilai kolom yang akan dimasukkan
kedalam table.
 Contoh:
 Maka :new.stok_barang akan bernilai 10
6/25/2016PemrogramanBasisData
16
2. STATEMENT UPDATE
 Mempunyai alias :new dan :old.
 Alias :new akan menyimpan nilai-nilai kolom yang
baru
 Alias :old menyimpan nilai-nilai kolom asli yang
terdapat didalam tabel (nilai sebelum di-update)
 Misalnya didalam table barang, stok yang tersedia
untuk lemari es adalah 20, dan kita akan mengganti
(meng-update) jumlah stok tersebut dengan nilai
30, maka :new.stok_barang akan bernilai 30,
sedangkan :old.stok_barang bernilai 20.
6/25/2016PemrogramanBasisData
17
3. STATEMENT DELETE
 Hanya mempunyai alias :old, yaitu variable yang
menyimpan nilai-nilai kolom dari baris yang dihapus
dalam sebuah table
6/25/2016PemrogramanBasisData
18
MEMBUAT SYSTEM TRIGGERS
 Syntax system trigger
 Mengelola DATABASE TRIGGER system privilege
diperlukan untuk membuat system trigger
6/25/2016PemrogramanBasisData
19
PENAMAAN TRIGGER
 Object oracle secara umum membagi satu
namespace, nama unik (nama package harus
bukan nama procedure).
 Trigger mempunyai namespace sendiri
6/25/2016PemrogramanBasisData
20
BATASAN TRIGGER
 Trigger hanya dapat digunakan untuk menuliskan
statement-statement DML.
 Tidak dapat mengandung perintah DDL (CREATE,
ALTER, DROP), DCL-Data Control Language
(COMMIT, ROLLBACK,...)
 Tidak memanggil code yang lain yang menjalankan
perintah kontrol transaksi
 Tidak bisa declare atau mengacu pada LONG atau
LONG RAW data
6/25/2016PemrogramanBasisData
21
CONTOH
 Trigger tersebut tetap akan terbuat ke dalam
database, namun akan salah pada saat kita
melakukan perubahan data (update) terhadap tabel
mhs.
6/25/2016PemrogramanBasisData
22
TRIGGER BODY
 Secara umum bentuk trigger adalah PL/SQL
procedure.
 Pengecualian: statement CALL tunggal
 Digunakan untuk procedure yaitu pembungkus
untuk kode C atau Java.
6/25/2016PemrogramanBasisData
23
PRIVILEGES
 CREATE TRIGGER
 CREATE ANY TRIGGER
 ALTER ANY TRIGGER
 DROP ANY TRIGGER
 ADMINISTER DATABASE TRIGGER
6/25/2016PemrogramanBasisData
24
MENGAKTIFKAN DAN MENONAKTIFKAN TRIGGER
 Secara default trigger dalam keadaan aktif
 Dalam database Oracle, trigger tidak selalu dijalankan,
tergantung pada setting yang dilakukan terhadap trigger
itu sendiri.
 Artinya, eksekusi trigger akan dilakukan hanya apabila
tigger diset dalam keadaan aktif (ENABLE) dan akan
diabaikan keberadaannya apabila trigger tersebut dalam
keadaan non-aktif (DISABLE)
Fasfgsagsagsadgsgdsgsdagsadg
gadsgsdagsadg
6/25/2016PemrogramanBasisData
25
MENGHAPUS TRIGGER
6/25/2016PemrogramanBasisData
26
SOAL LATIHAN:
1. Buatlah trigger untuk menambahkan jumlah
pasok barang yang ada pada tabel barang setiap
kali dilakukakn pemasukan (insert) data pada
tabel pasok, dimana jumlah yang ditambahkan
ke dalam stok barang tersebut adalah jumlah
pasok pada saat pemasokan!
Jawaban:
6/25/2016PemrogramanBasisData
27
2. Buatlah trigger untuk mengurangi jumlah stok barang
yang ada pada tabel barang setiap kali dilakukan
penghapusan (delete) data pada tabel pasok, dimana
jumlah yang digunakan untuk pengurangan stok
barang tersebut adalah jumlah pasok dari baris yang
dihapus pada tabel pasok!
Jawaban:
6/25/2016PemrogramanBasisData
28
3. Buatlah trigger untuk mengubah jumlah stok barang
yang ada pada table barang setiap kali dilakukan
perubahan (update) data pada tabel pasok! Perlu
diperhatikan bahwa jika nilai perubahan jumlah pasok
pada table pasok lebih besar dari jumlah stok barang
yang ada pada tabel barang, maka jumlah stok barang
akan bertambah, sedangkan jika lebih kecil maka stok
barang akan berkurang.
6/25/2016PemrogramanBasisData
29
4. Buatlah sebuah trigger pada tabel customer agar
setiap terjadi proses pemasukan data baru pada tabel
tersebut, maka nilai kolom nama_konsumen akan
berubah menjadi huruf kapital walaupun pada saat
memasukkan data, data yang dimasukkan berupa
huruf kecil!
5. Buatlah 3 buah trigger pada tabel pembelian sehingga
pada saat memasukkan (insert), mengubah (update)
atau menghapus (delete) baris dalam table tersebut,
maka jumlah stok barang pada table barang akan ikut
berubah sesuai dengan manipulasi data yang
dilakukan!
6/25/2016PemrogramanBasisData
30

Pert 4 1--_trigger

  • 1.
  • 2.
    PENDAHULUAN  Trigger adalahblok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika Anda melakukan statement-statement SQL (Insert, Update, dan Delete) pada sebuah table.  Implementasi: mengeset/mengubah nilai kolom suatu table sehingga validasi nilai dari table tersebut akan terjaga 6/25/2016PemrogramanBasisData 2
  • 3.
    TRIGGER  Trigger tersimpanberdiri sendiri, bukan merupakan bagian dari package  Trigger tidak mempunyai parameter  Dipanggil pada saat DML, database startup/shutdown, dan pada operasi DDL tertentu 6/25/2016PemrogramanBasisData 3
  • 4.
    JENIS-JENIS TRIGGER Trigger digunakanuntuk:  Maintain integritas konstrain yang komplek  Informasi auditing (siapa yang melakukan perubahan dan kapan)  Memanggil program yang lain 6/25/2016PemrogramanBasisData 4
  • 5.
    DML TRIGGERS  Dijalankansebelum (before) atau setelah (after) INSERT, UPDATE, DELETE 6/25/2016PemrogramanBasisData 5
  • 6.
    SYSTEM TRIGGERS  Dijalankansetelah operasi system, seperti startup, shutdown, dan pembuatan object. 6/25/2016PemrogramanBasisData 6
  • 7.
    MEMBUAT TRIGGER  Oracletelah menyediakan statement CREATE TRIGGER untuk membuat sebuah trigger yang selanjutnya akan diaktivasi berdasarkan event tertentu.  Secara umum, event trigger terbagi menjadi dua, yaitu BEFORE (sebelum) dan AFTER (sesudah). 6/25/2016PemrogramanBasisData 7
  • 8.
    MEMBUAT TRIGGER  SyntaxTrigger: 6/25/2016PemrogramanBasisData 8
  • 9.
    MEMBUAT TRIGGER Keterangan:  REPLACEdigunakan untuk mengganti isi trigger jika nama trigger yang dibuat sudah ada sebelumnya  BEFORE digunakan untuk mendeklarasikan bahwa trigger yang dibuat itu akan dieksekusi sebelum sebuah statement SQL dilakukan  AFTER digunakan untuk mendeklarasikan bahwa trigger yang dibuat itu akan dieksekusi setelah sebuah statement SQL dilakukakan  Statement yang dimaksud disini adalah statement SQL dalam DML 6/25/2016PemrogramanBasisData 9
  • 10.
    CONTOH  Membuat triggerdengan nama tr_coba yang dapat menampilkan teks ‘Table mhs telah di- update’ setiap kali selesai (AFTER) melakukan update terhadap table mhs. 6/25/2016PemrogramanBasisData 10
  • 11.
    PENGARUH TRIGGER  Untukmemeriksa trigger yang telah dibuat tersebut, maka begitu dilakukan update terhadap table mhs, maka hasil yang akan tampak adalah sbb: 6/25/2016PemrogramanBasisData 11
  • 12.
    MEMBUAT DML TRIGGERS Type-typedari DML Trigger Category Values comments Statement INSERT and/or DELETE and/or UPDATE Choose operation(s) Timing BEFORE or AFTER Choose timing Level FOR EACH ROW or statement (omit FOR EACH ROW) Once per DML statement, or once for every row affected 6/25/2016PemrogramanBasisData 12
  • 13.
    URUTAN DML TRIGGERDIJALANKAN 1. Sebelum statement level trigger 2. Untuk tiap row (for each row) yang terpengaruh a. Sebelum row-level trigger b. Operasi c. Setelah row-level trigger 3. Setelah statement level trigger 6/25/2016PemrogramanBasisData 13
  • 14.
    ALIAS DIDALAM TRIGGER Dalam trigger dikenal dengan istilah alias atau referensi, yaitu sejenis variable yang menyimpan nilai dari suatu kolom didalam table  Alias tersebut terbagi menjadi dua yaitu :new dan :old.  Alias dituliskan didepan nama kolom yang akan diambil nilainya 6/25/2016PemrogramanBasisData 14
  • 15.
    ALIAS DIDALAM TRIGGER(2) Terdapattiga hal yang perlu dipahami pada saat menggunakan alias didalam trigger: 1. INSERT 2. UPDATE 3. DELETE 6/25/2016PemrogramanBasisData 15
  • 16.
    1. STATEMENT INSERT Hanya mempunyai alias :new, yaitu variable yang menyimpan nilai-nilai kolom yang akan dimasukkan kedalam table.  Contoh:  Maka :new.stok_barang akan bernilai 10 6/25/2016PemrogramanBasisData 16
  • 17.
    2. STATEMENT UPDATE Mempunyai alias :new dan :old.  Alias :new akan menyimpan nilai-nilai kolom yang baru  Alias :old menyimpan nilai-nilai kolom asli yang terdapat didalam tabel (nilai sebelum di-update)  Misalnya didalam table barang, stok yang tersedia untuk lemari es adalah 20, dan kita akan mengganti (meng-update) jumlah stok tersebut dengan nilai 30, maka :new.stok_barang akan bernilai 30, sedangkan :old.stok_barang bernilai 20. 6/25/2016PemrogramanBasisData 17
  • 18.
    3. STATEMENT DELETE Hanya mempunyai alias :old, yaitu variable yang menyimpan nilai-nilai kolom dari baris yang dihapus dalam sebuah table 6/25/2016PemrogramanBasisData 18
  • 19.
    MEMBUAT SYSTEM TRIGGERS Syntax system trigger  Mengelola DATABASE TRIGGER system privilege diperlukan untuk membuat system trigger 6/25/2016PemrogramanBasisData 19
  • 20.
    PENAMAAN TRIGGER  Objectoracle secara umum membagi satu namespace, nama unik (nama package harus bukan nama procedure).  Trigger mempunyai namespace sendiri 6/25/2016PemrogramanBasisData 20
  • 21.
    BATASAN TRIGGER  Triggerhanya dapat digunakan untuk menuliskan statement-statement DML.  Tidak dapat mengandung perintah DDL (CREATE, ALTER, DROP), DCL-Data Control Language (COMMIT, ROLLBACK,...)  Tidak memanggil code yang lain yang menjalankan perintah kontrol transaksi  Tidak bisa declare atau mengacu pada LONG atau LONG RAW data 6/25/2016PemrogramanBasisData 21
  • 22.
    CONTOH  Trigger tersebuttetap akan terbuat ke dalam database, namun akan salah pada saat kita melakukan perubahan data (update) terhadap tabel mhs. 6/25/2016PemrogramanBasisData 22
  • 23.
    TRIGGER BODY  Secaraumum bentuk trigger adalah PL/SQL procedure.  Pengecualian: statement CALL tunggal  Digunakan untuk procedure yaitu pembungkus untuk kode C atau Java. 6/25/2016PemrogramanBasisData 23
  • 24.
    PRIVILEGES  CREATE TRIGGER CREATE ANY TRIGGER  ALTER ANY TRIGGER  DROP ANY TRIGGER  ADMINISTER DATABASE TRIGGER 6/25/2016PemrogramanBasisData 24
  • 25.
    MENGAKTIFKAN DAN MENONAKTIFKANTRIGGER  Secara default trigger dalam keadaan aktif  Dalam database Oracle, trigger tidak selalu dijalankan, tergantung pada setting yang dilakukan terhadap trigger itu sendiri.  Artinya, eksekusi trigger akan dilakukan hanya apabila tigger diset dalam keadaan aktif (ENABLE) dan akan diabaikan keberadaannya apabila trigger tersebut dalam keadaan non-aktif (DISABLE) Fasfgsagsagsadgsgdsgsdagsadg gadsgsdagsadg 6/25/2016PemrogramanBasisData 25
  • 26.
  • 27.
    SOAL LATIHAN: 1. Buatlahtrigger untuk menambahkan jumlah pasok barang yang ada pada tabel barang setiap kali dilakukakn pemasukan (insert) data pada tabel pasok, dimana jumlah yang ditambahkan ke dalam stok barang tersebut adalah jumlah pasok pada saat pemasokan! Jawaban: 6/25/2016PemrogramanBasisData 27
  • 28.
    2. Buatlah triggeruntuk mengurangi jumlah stok barang yang ada pada tabel barang setiap kali dilakukan penghapusan (delete) data pada tabel pasok, dimana jumlah yang digunakan untuk pengurangan stok barang tersebut adalah jumlah pasok dari baris yang dihapus pada tabel pasok! Jawaban: 6/25/2016PemrogramanBasisData 28
  • 29.
    3. Buatlah triggeruntuk mengubah jumlah stok barang yang ada pada table barang setiap kali dilakukan perubahan (update) data pada tabel pasok! Perlu diperhatikan bahwa jika nilai perubahan jumlah pasok pada table pasok lebih besar dari jumlah stok barang yang ada pada tabel barang, maka jumlah stok barang akan bertambah, sedangkan jika lebih kecil maka stok barang akan berkurang. 6/25/2016PemrogramanBasisData 29
  • 30.
    4. Buatlah sebuahtrigger pada tabel customer agar setiap terjadi proses pemasukan data baru pada tabel tersebut, maka nilai kolom nama_konsumen akan berubah menjadi huruf kapital walaupun pada saat memasukkan data, data yang dimasukkan berupa huruf kecil! 5. Buatlah 3 buah trigger pada tabel pembelian sehingga pada saat memasukkan (insert), mengubah (update) atau menghapus (delete) baris dalam table tersebut, maka jumlah stok barang pada table barang akan ikut berubah sesuai dengan manipulasi data yang dilakukan! 6/25/2016PemrogramanBasisData 30