CREATE OR REPLACE TRIGGER trigger_name
{ BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON object_name
FOR EACH ROW
BEGIN
-- Insert Case
IF INSERTING THEN
// Statement
END IF;
-- Update Case
IF UPDATING THEN
// Statement
END IF;
-- Delete Case
IF DELETING THEN
// Statement
END IF;
// :NEW.Column
// :OLD.Column
// Statement
END;
CREATE OR REPLACE TRIGGER DELETE_AUDIT
AFTER DELETE ON CUSTOMER
FOR EACH ROW
BEGIN
DECLARE
sCustomerID VARCHAR(4);
BEGIN
sCustomerID := :OLD.CUSTOMER_ID;
DELETE FROM AUDIT_LOG WHERE CUSTOMER_ID = sCustomerID;
END;
END;
Example 2 : ตัวอย่างการสร้าง Trigger ให้ DELETE OR INSERT OR UPDATE ข้อมูล และอัพเดดข้อมูลที่เกี่ยวข้อง
จากรูปจะเห็นว่าตาราง CUSTOMERกับ AUDIT_LOG จะมีข้อมูลที่เชื่อมโยงกันด้วย CUSTOMER_ID ใน Column ของ USED ใน CUSTOMER จะเป็นค่า SUM มาจาก AUDIT_LOG โดยในตัวอย่างนี้เราจะทำ Trigger เมื่อเพิ่มข้อมูลใน AUDIT_LOG ให้ทำการ SUM แล้วอัพเดดค่า USED ใน CUSTOMER ด้วย
CREATE OR REPLACE TRIGGER SUM_UPDATE_USED
AFTER DELETE OR INSERT OR UPDATE ON AUDIT_LOG
FOR EACH ROW
BEGIN
DECLARE
sCustomerID VARCHAR(4);
dSumUsed DECIMAL(18,2);
BEGIN
-- CUSTOMER_ID Insert Case
IF INSERTING THEN
sCustomerID := :NEW.CUSTOMER_ID;
END IF;
-- CUSTOMER_ID Update Case
IF UPDATING THEN
sCustomerID := :NEW.CUSTOMER_ID;
END IF;
-- CUSTOMER_ID Delete Case
IF DELETING THEN
sCustomerID := :OLD.CUSTOMER_ID;
END IF;
-- Select SUM USED
SELECT SUM(USED) INTO dSumUsed FROM AUDIT_LOG WHERE CUSTOMER_ID = sCustomerID;
-- Update CUSTOMER
UPDATE CUSTOMER SET USED = dSumUsed WHERE CUSTOMER_ID = sCustomerID;
END;
END;
จากคำสั่งนี้จะเห็นว่าเมื่อมีการ DELETE OR INSERT OR UPDATE ที่ AUDIT_LOG จะสั่งให้ SUM ค่าแล้วไป UPDATE ที่ CUSTOMER
สร้าง Trigger ผ่าน Tools ของ Oracle SQL Developer
ทดสอบเพิ่มหรือ INSERT ข้อมูลในตาราง AUDIT_LOG
จะเห็นว่าที่ CUSTOMER จะมีการ UPDATE คอลัมบ์ของ USED ให้อัตโนมัติ
ทดสอบเพิ่มหรือ UPDATE ข้อมูลในตาราง AUDIT_LOG
จะเห็นว่าที่ CUSTOMER จะมีการ UPDATE คอลัมบ์ของ USED ให้อัตโนมัติ
ทดสอบเพิ่มหรือ DELETE ข้อมูลในตาราง AUDIT_LOG
จะเห็นว่าที่ CUSTOMER จะมีการ UPDATE คอลัมบ์ของ USED ให้อัตโนมัติ