Setelah sebelumnya
kita telah mempelajari bagaimana membuat trigger
dalam database, Kali ini kita akan mempelajari tentang
bagaimana caranya membuat trigger dalam sistem.
Di dalam
system terdapat Event-event Yang Mungkin terjadi yaitu :
Event
|
Possible
Value
|
AFTER SERVERERROR
|
Trigger akan diaktifkan ketika
terjadinya server error
|
AFTER LOGON
|
Trigger akan diaktifkan ketiga
ada user yang masuk ke database
|
BEFORE LOGOFF
|
Trigger akan diaktifkan ketika
user ingin keluar dari database
|
AFTER STARTUP
|
Trigger akan dijalankan ketika
database dijalankan
|
BEFORE SHUTDOWN
|
Trigger akan dijalankan ketika
database ingin di shut down
|
Kita
dapat menggunakan event-event trigger diatas pada SCHEMA maupun DATABASE tetapi
tidak untuk event ShutDown dan StartUp yang hanya dapat dijalankan pada
DATABASE saja.
Syntax :
CREATE [OR REPLACE]
TRIGGER trigger_name
timing
[database_event1 [OR database_event2 OR ...]]
ON {DATABASE|SCHEMA}
trigger_body
timing
[database_event1 [OR database_event2 OR ...]]
ON {DATABASE|SCHEMA}
trigger_body
Contoh :
Pada
contoh kali ini kita akan membuat sebuah trigger yang digunakan untuk
mengetahui kapan dan siapa user yang login dan logoff pada sebuah schema.
Hal
pertama yang kita lakukan adalah membuat sebuah table History yang
nantinya akan menampung data tentang siapa yang login dan logoff dari schema
CREATE TABLE
);
History (
Users
Varchar2(20),
LogDate
Date,
Action
VARCHAR2(20)
);
Setelah
itu kita buat 2 buah trigger yaitu trigger logon_trig yang digunakan untuk
memasukkan detail data user yang logon ke dalam tabel history dan yang kedua
adalah trigger logoff_trig yang digunakan untuk memasukkan detail data user
yang logoff dari skema.
CREATE OR REPLACE TRIGGER
AFTER LOGON ON SCHEMA
BEGIN
INSERT INTO History VALUES (USER, SYSDATE,
END;
/
CREATE OR REPLACE TRIGGER
BEFORE LOGOFF ON SCHEMA
BEGIN
INSERT INTO History VALUES (USER, SYSDATE,
END;
/
logon_trig
AFTER LOGON ON SCHEMA
BEGIN
INSERT INTO History VALUES (USER, SYSDATE,
'Logging on
');END;
/
CREATE OR REPLACE TRIGGER
logoff_trig
BEFORE LOGOFF ON SCHEMA
BEGIN
INSERT INTO History VALUES (USER, SYSDATE,
'Logging off'
);END;
/
Karena contoh
diatas kita menspesifikkan trigger tersebut pada schema (ON SCHEMA), trigger
logon dan logoff_trig hanya akan diaktifkan ketika kita login dan logoff pada
schema tempat kita membuat trigger login dan logoff_trigger, misalkan kita
membuat trigger tersebut pada schema yang dimiliki oleh hr, maka data yang ada
adalah data yang keluar dan masuk pada skema hr.
Sedangkan
jika kita menspesifikkan trigger tersebut pada DATABASE (ON DATABASE), trigger
tersebut akan aktif terhadap schema yang dimiliki oleh semua user. Namun untuk
dapat membuat sebuah trigger pada database diperlukan sebuat ADMINISTER
DATABASE TRIGGER privilege.
Berikut Privilege yang
digunakan dalam trigger :
- CREATE/ALTER/DROP (ANY) TRIGGER
privilege, yang digunakan untuk membuat trigger pada schema
- ADMINISTER DATABASE TRIGGER privilege,
yang digunakan untuk membuat trigger dalam database
- EXECUTE privilege, yang digunakan apabila trigger yang kita buat diperuntukkan untuk object yang tidak kita miliki
CALL Statement
Dengan
Call Statement, kita dapat menjalankan stored procedure di dalam
Trigger
Syntax :
CREATE [OR REPLACE]
TRIGGER trigger_name
timing
event1 [OR event2 OR event3]
ON table_name
[REFERENCING OLD AS old | NEW AS new]
[FOR EACH ROW]
[WHEN condition]
CALL procedure_name
/
timing
event1 [OR event2 OR event3]
ON table_name
[REFERENCING OLD AS old | NEW AS new]
[FOR EACH ROW]
[WHEN condition]
CALL procedure_name
/
Contoh :
CREATE TRIGGER
BEFORE UPDATE OF
FOR EACH ROW
WHEN
CALL
salary_check
BEFORE UPDATE OF
salary, job_id
ON employees
FOR EACH ROW
WHEN
(NEW.job_id <> 'SH_CLERK')
CALL
check_salary(:NEW.job_id, :NEW.salary)
/
Business Aplication
Scenarios For Implementing Triggers
Dengan
adanya trigger kita dapat menggunakannya untuk :
- Security
Dengan adanya trigger kita dapat membatasi siapa saja yang dapat mengakses object dalam database sesuai dengan nilai yang telah dideklarasikan oleh trigger tersebut. - Auditing
Dengan adanya trigger kita dapat melacak aliran data yang terjadi di dalam database - Data integrity
Trigger dapat menjaga integritas data - Referential integrity
Ketika Oracle Server hanya dapat membuat standard referential integrity rules, Trigger dapat mengimplementasikan nonstandard functionality
Table replication
Trigger dapat menyalin Table ke dalam bentuk replika
Trigger dapat menyalin Table ke dalam bentuk replika
- Computing derived data
automatically
Triggers compute derived data values automatically - Event logging
Trigger dapat membuat hisrory logging secara transparant