在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;
请注意,触发器是一种强大的功能,但也要小心使用。确保在创建触发器时仔细考虑性能和安全性问题,以防止意外地影响系统性能或导致数据泄露。