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

Slides:



Advertisements
Presentasi serupa
Antonius Wahyu Sudrajat, S. Kom., M.T.I. Trigger.
Advertisements

SQL – DML.
MATA KULIAH : “LOGIKA DAN ALGORITMA”
Error Handling (Exception) & INDEX
PERINTAH SQL.
DDL & Aturan Referential
T R I G G E R.
DML Lanjutan Pertemuan Minggu Ke-10.
Manajemen Basis Data menggunakan SQL Server
TRIGGER.
Triggers & Stored Procedure The main reference of this presentation is from book: Peter Rob, Carlos Coronel, “Database systems: Design, Implementation.
Praktek Pemograman Client-Server
STORED PROCEDURE Achmad Yasid, SKom.
Procedure Siti Mukaromah, S.Kom.
TRIGGER Siti Mukaromah, S.Kom.
TRIGGER.
Data Definition Language dan Data Manipulation Language
Review DDL Pertemuan ke 2.
Triggers & Stored Procedure The main reference of this presentation is from book: Peter Rob, Carlos Coronel, “Database systems: Design, Implementation.
Data Types Data Definition Language Referential Constraint SQL Query
SQL (Structure Query Language)
SQL Pertemuan
PENGANTAR TEKNOLOGI SIA 2
Disampaikan Oleh : Wiratmoko Yuwono
SQL Basis Data.
C U R S O R.
Exception Handling: Non Predefined Exception
PACKAGE.
Pendahuluan Nama Mata Kuliah : Dasar Pemrograman Basis Data
Exception Handling: User-defined Exception
Stored Procedure Dengan Parameter
Stored Function Tanpa Parameter
TRIGGER LANJUT.
TRIGGER (Statement & Row Trigger)
Tujuan Pembelajaran Mampu menjelaskan dan mendemokan konsep overload pada subprogram; Mampu menjelaskan dan mendemokan cara membangun initialization.
PENJURUSAN DI ORACLE ORACLE DEVELOPER
TRIGGER SYAIFUL HUDA, S.Kom.
DDL, DML.
STORED PROCEDURE & TRIGGER
Integritas basis data.
View dan Trigger Materi 5
SQL (Structure Query Language)
Manajemen Basis Data menggunakan SQL Server
Sistem Basis Data ABU SALAM, M.KOM.
Praktikum Berkas dan Basis Data
TRIGGER.
SQL OVERVIEW.
Dml(Data manipulation language)
Pendahuluan Nama Mata Kuliah : Pemrograman Basis Data
Created By Amir Ali,S.Kom.,M.Kom
Procedure Siti Mukaromah, S.Kom.
Blok PL/SQL Non Modular dan Modular
Anonymous Blok PL/SQL dan Tipe Data
Stored Procedure Tanpa Parameter
OLEH : Slamet Sn Wibowo Wicaksono
Stored Function Dengan Parameter
BAB ENHANCED DATA MODELS FOR ADVANCED APPLICATIONS
Data Manipulation Language (DML)
ORACLE Trigger Hasan Dwi Cahyono.
CURSOR.
Oleh : FIRMAN JAYA, S.Pt, M.Kom
SQL.
Integritas Basis Data Triggers, Store Procedure
Integritas basis data.
Referensi Bahasa MySQL
12/6/2018 TRIGGER Pemrograman Basis Data Siti Mukaromah, S.Kom.
PL/SQL CURSOR Program Studi D3 Teknik Informatika -Fakultas Ilmu Terapan.
BAHASA BASIS DATA Data Manipulation Languange
BAHASA BASIS DATA Data Defenition Languange
10/14/2019 TRIGGER Pemrograman Basis Data.
Transcript presentasi:

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

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

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.

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

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).

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

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.

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

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

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

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=10000000 where nim=‘30108001’;

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.

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.

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)

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)

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;

Contoh Kasus

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; /

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;

LATIHAN

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

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;

SELESAI