Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

ORACLE PL/SQL TRIGGER Program Studi D3 Teknik Informatika -Fakultas Ilmu Terapan.

Presentasi serupa


Presentasi berjudul: "ORACLE PL/SQL TRIGGER Program Studi D3 Teknik Informatika -Fakultas Ilmu Terapan."— Transcript presentasi:

1 ORACLE PL/SQL TRIGGER Program Studi D3 Teknik Informatika -Fakultas Ilmu Terapan

2 REFERENSI Feurstein , Steven, and Bill Pribyl. Oracle PL/SQL Programming, 5th Edition. Sebastopol: O'Reilly Media,2009 Srivastava, Tulika, dan Glenn Stokol. Oracle Database 10g:Develop PL/SQL Program Units 2nd Edition. Boston: Oracle Publisher,2006 Urman, Scott, Ron Hardman, dan Michael Laughlin. Oracle Database 10g PL/SQL Programming. Boston:McGraw-Hill,2004. Dedy Rahman Wijaya,S.T.,M.T.,OCA,Modul Praktikum Pemrograman Basis Data, Universitas Telkom, 2014

3 OVERVIEW Salah satu masalah dalam database adalah integritas bagaimana menjaga data agar tetap konsisten. Hal ini bisa ditangani dengan trigger yang menyerupai fungsi atau procedure yang dijalankan secara otomatis sebagai pemicu dari sebuah kondisi. 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 perintah insert, delete atau update.

4 Manfaat Trigger Menentukan nilai kolom-kolom tertentu secara otomatis.
Menghindarkan transaksi data yang tidak valid. Membuat autorisasi sekuriti yang kompleks. Membuat business rule yang kompleks

5 BATASAN TRIGGER Trigger mempunyai batasan:
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 melanggar constraint. Tidak dapat memanipulasi suatu tabel jika tabel tersebut merupakan tabel rujukan/acuan dari trigger event (update).

6 CREATE [or replace] TRIGGER nama_trigger ( BEFORE|AFTER ) ( INSERT|UPDATE [OF nama_kolom, ..]|DELETE )ON nama_tabel [FOR EACH ROW] [WHEN (kondisi)] DECLARE Deklarasi tipe data BEGIN Trigger body END; Trigger Timing Trigger Restriction Trigger Event

7 Trigger Event Pemicu tereksekusinya trigger
Insert  trigger dieksekusi jika ada perintah insert untuk suatu tabel. Update  trigger dieksekusi jika ada perintah update untuk suatu tabel. Delete  trigger dieksekusi jika ada perintah delete untuk suatu tabel.

8 Trigger Timing Waktu tereksekusinya trigger
Before  trigger dieksekusi sebelum trigger event After  trigger dieksekusi setelah trigger event Instead of  timing KHUSUS untuk VIEW

9 Trigger Restriction Kondisi yang menentukan apakah isi dari trigger dieksekusi atau tidak. Contoh: when (new.donasi => 0)

10 Trigger event (insert/update/delete)
Eksekusi Trigger Trigger event (insert/update/delete) Trigger tereksekusi

11 Create or replace trigger bef_upd_row_keuangan
before  Trigger Timing update of donasi on keuangan  Trigger Event for each row  Trigger Type when (new.donasi => 0)  Trigger Restriction begin dbms_output.put('Donasi terbaru:'||:new.donasi); end; / Triggering Statement : Update keuangan set donasi= where nim=‘ ’;

12 JENIS-JENIS TRIGGER Jenis Trigger Berdasarkan jumlah Eksekusi:
Row-level trigger, dieksekusi untuk setiap row yang dimanipulasi pada suatu transaksi. Dengan kata lain, row-level trigger mengerjakan trigger action satu kali untuk setiap row yang dimanipulasi. Penerapan trigger ini ditunjukkan oleh adanya klausa FOR EACH ROW. Row-level trigger berguna jika kode dalam trigger body bergantung pada setiap baris yang terpengaruh oleh triggering statement. Statement-level trigger, dieksekusi satu kali pada saat transaksi, tanpa memperhatikan jumlah row yang terlibat. Misalnya, jika terdapat suatu transaksi yang memasukkan 1000 baris ke dalam tabel, maka statement-level trigger hanya akan dieksekusi sekali saja. Statement-level trigger berguna jika kode dalam trigger body tidak bergantung pada baris yang terpengaruh oleh triggering statement. Secara default trigger yang dibuat adalah statement-level trigger.

13 JENIS-JENIS TRIGGER Jenis Trigger Berdasarkan Timing:
Dalam pembuatan sebuah trigger kita dapat menentukan trigger timing yaitu apakah trigger body akan dieksekusi sebelum atau sesudah triggering statement dieksekusi. Before trigger menjalankan trigger body sebelum event atau triggering statement. Oleh karena itu, trigger ini cocok digunakan untuk mendeteksi bagaimana event boleh dilanjutkan maupun tidak. After trigger menjalankan trigger action setelah event terjadi. Catatan: Before dan After trigger tidak dapat diimplementasikan pada view.

14 JENIS-JENIS TRIGGER Jenis Trigger yang Lain: Instead Of Trigger
Instead of trigger hanya akan dieksekusi bagi view dan diaktivasi jika terjadi perubahan pada base table (tabel asli). Proses yang akan dilakukan oleh triggering statement akan digantikan oleh aksi pada trigger body. System Event & User Event Trigger Penggunaan trigger dapat dikelompokkan menurut event yang terjadi: System events a. Database startup & shutdown b. Server error message events c. User events User Event a. DDL statements (CREATE, ALTER, and DROP) b. DML statements (INSERT, DELETE, and UPDATE)

15 Alias/ Referensi Kita mungkin akan berhubungan dengan data lama (old) dan data baru (new) yang terjadi dalam transaksi. Dalam trigger, dikenal istilah alias atau referensi, yaitu sejenis variabel yang menyimpan nilai dari suatu kolom dalam tabel. Alias terbagi menjadi dua, yaitu: Untuk mendapatkan data baru pada sebuah tabel di dalam trigger body, dapat dilakukan dengan perintah sebagai berikut: :new.nama_kolom Untuk mendapatkan data lama pada sebuah tabel di dalam trigger body, perintah yang digunakan: :old.nama_kolom Referensi nilai kolom di trigger: insert (new.nama_kolom) update (new.nama_kolom dan old.nama_kolom) delete (old.kolom_name)

16 CREATE OR REPLACE TRIGGER BEF_UPD_MAHASISWA BEFORE UPDATE OF NAMA ON MAHASISWA FOR EACH ROW DECLARE VNAMA_BARU MAHASISWA.NAMA%TYPE; VNAMA_LAMA MAHASISWA.NAMA%TYPE; BEGIN VNAMA_BARU:= :NEW.NAMA; VNAMA_LAMA:= :OLD.NAMA; DBMS_OUTPUT.PUT_LINE('TELAH DIUPDATE'); DBMS_OUTPUT.PUT_LINE('NIM MAHASISWA : '||:OLD.NIM); DBMS_OUTPUT.PUT_LINE('NAMA MAHASISWA LAMA : '|| VNAMA_LAMA); DBMS_OUTPUT.PUT_LINE('NAMA MAHASISWA BARU : '|| VNAMA_BARU); END;

17 Contoh Kasus

18 CREATE OR REPLACE TRIGGER TRG_HISTORI_MAHASISWA AFTER INSERT OR UPDATE OR DELETE ON MAHASISWA FOR EACH ROW DECLARE a varchar2(100); BEGIN IF INSERTING THEN a := 'TERJADI PENAMBAHAN DATA MAHASISWA'; ELSIF UPDATING THEN a := 'TERJADI PERUBAHAN DATA MAHASISWA'; ELSIF DELETING THEN a := 'TERJADI PENGURANGAN DATA MAHASISWA'; END IF; INSERT INTO HISTORI_MAHASISWA(NAMA_USER,WAKTU,KETERANGAN) VALUES (USER,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'),a); dbms_output.put(a); END; /

19 Mengaktifkan dan Me-non aktifkan Trigger ALTER TRIGGER nama_trigger
DISABLE | ENABLE; Untuk mengaktifkan atau menonaktifkan semua trigger yang diasosiasikan pada sebuah tabel dapat menggunakan sintaks: ALTER TABLE nama_tabel [DISABLE|ENABLE] ALL TRIGGER; Sedangkan untuk menghapus trigger digunakan perintah berikut : DROP TRIGGER nama_trigger;

20 LATIHAN

21 Latihan 1 Menggunakan HR Schema
Buatlah sebuah trigger untuk tabel regions. Trigger akan membuat tulisan “Region <nama region baru> ditambahkan” setelah menambahkan baris baru pada tabel region Dapat menggunakan CLI/Oracle SQL Developer

22 LATIHAN 2 Menggunakan HR Schema
Buatlah sebuah trigger untuk tabel countries. Gunakan referencing Trigger akan membuat tulisan “Country <nama country baru> ditambahkan pada <nama region>” setelah menambahkan baris baru pada tabel countries Dapat menggunakan CLI/Oracle SQL Developer CREATE OR REPLACE TRIGGER TRG_COUNTRIES AFTER INSERT ON COUNTRIES REFERENCING OLD AS LAMA NEW AS BARU FOR EACH ROW DECLARE v_nama_region regions.region_name%TYPE; BEGIN SELECT region_name into v_nama_region FROM regions WHERE region_id=:baru.region_id; DBMS_OUTPUT.PUT_LINE('Country '|| :baru.country_name||' ditambahkan pada '|| v_nama_region); END;

23 SELESAI


Download ppt "ORACLE PL/SQL TRIGGER Program Studi D3 Teknik Informatika -Fakultas Ilmu Terapan."

Presentasi serupa


Iklan oleh Google