在Oracle數據庫中,觸發器是一種特殊類型的存儲過程,它在特定事件(如INSERT、UPDATE或DELETE)發生時自動執行
CREATE TABLE employee_audit (
id NUMBER GENERATED ALWAYS AS IDENTITY,
action VARCHAR2(10),
employee_id NUMBER,
change_date TIMESTAMP
);
CREATE OR REPLACE TRIGGER audit_employee_changes
AFTER INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW
DECLARE
v_action VARCHAR2(10);
BEGIN
IF INSERTING THEN
v_action := 'INSERT';
ELSIF UPDATING THEN
v_action := 'UPDATE';
ELSIF DELETING THEN
v_action := 'DELETE';
END IF;
INSERT INTO employee_audit (action, employee_id, change_date)
VALUES (v_action, :NEW.employee_id, SYSTIMESTAMP);
END;
/
SELECT trigger_name, table_name, triggering_event, trigger_type
FROM user_triggers
WHERE trigger_name = 'AUDIT_EMPLOYEE_CHANGES';
修改觸發器: 如果需要修改觸發器,可以使用ALTER TRIGGER語句。但是,更常見的做法是刪除現有觸發器并重新創建一個新的觸發器。在上面的示例中,我們使用CREATE OR REPLACE TRIGGER語句來實現這一點。
刪除觸發器: 要刪除觸發器,可以使用DROP TRIGGER語句:
DROP TRIGGER audit_employee_changes;
-- 禁用觸發器
ALTER TRIGGER audit_employee_changes DISABLE;
-- 啟用觸發器
ALTER TRIGGER audit_employee_changes ENABLE;
請注意,觸發器是一種強大的功能,但也要小心使用。確保在創建觸發器時仔細考慮性能和安全性問題,以防止意外地影響系統性能或導致數據泄露。