基础书籍中记录下来的。
--1、语句触发器 create or replace trigger tr_insert_test1 before insert on test1 begin if user!='admin' then raise_application_error(-20001,'权限不足,不能向数据表中插入数据1'); end if; end; --多个激活动作 create or replace trigger tr_insert_test2 before insert or update or delete on test1 begin if user!='KELY' then--区分大小写,统一大写 raise_application_error(-20001,'权限不足,不能向数据表中插入数据2'); end if; end; --触发器谓词:INSERTING、UPDATING、DELETING(类型布尔值) --记录数据库表操作日志,使用触发器 create table t_log( u_name varchar2(20), action varchar2(50), log_time date default sysdate ); create or replace trigger tr_table_log after insert or update or delete on test1 begin if inserting then insert into t_log(u_name,action) values(user,'insert'); end if; if updating then insert into t_log(u_name,action) values(user,'update'); end if; if deleting then insert into t_log(u_name,action) values(user,'delete'); end if; end; --禁用表的权限校验触发器 alter trigger tr_table_log enable;--disable/enable --总结:作用级别为表(不支持视图before/after insert和表before/after select), -- 无论触发动作影响到多少记录都执行一次触发器 --2、行触发器 insert update delete :old 不可用 可用 可用 :new 可用 可用 不可用 --实例 create or replace trigger tr_test1_history before update or delete on test1 for each row --行触发器的标志 begin insert into test1_history values(:old.tid,:old.tname,:old.tage,:old.remark); end; --变量引用于referencing create or replace trigger tri_test1_insert before insert on test1 referencing new as new_value for each row begin declare max_id number; begin select max(tid) into max_id from test1; :new_value.tid := max_id+1; end; end; --触发器的条件限制 --3、instead of触发器(视图) --4、系统事件与用户事件触发器 --系统事件触发器 --after startup/before shutdown(系统事件) on database --用户事件触发器 -- on system.schema:指定触发器的作用对象为用户system的所有对象(表名) --5、触发器相关操作 --禁用/启用触发器:disable(alter trigger tr_name disable/enable) --数据字典中查看触发器:user_objects/user_triggers