触发器分类:
DML触发器: 创建在表上,由DML事件触发DDL触发器: 数据库对象创建与修改时触发instead of触发器: 创建在视图上并且只能在行级上触发,用于替代insert,delete等操作数据库系统事件触发: 定义在数据库或者模式上,由数据库事件触发
触发器组成:
触发事件: DML语句(insert/update/delete语句对表/视图的操作)、DDL语句(create/alter/drop语句对对象进行操作)、数据库系统事件触发时间: 触发器在触发事件之前(before)还是之后(after)触发操作: 触发后要做的操作触发对象: 表、视图、模式、数据库触发条件: 由where 子句指定逻辑表达式,只有当表达式值为 TRUE 时,才会触发操作触发频率: 即语句级(statement)触发器和行级(row)触发器
语法&说明:
1)说明不同类型的触发器如DML触发器,intsert of 触发器,DDL触发器语法格式存在差别 create [or replace] trigger 触发器名称 触发时间 触发时间on 表名/视图[for each row] -- 加上 for each row 即为行级触发器,不加时为语句触发器,建议添加 beginpl/sql end;2)注意事项在触发器执行部分只能使用DML语句(insert/update/delete/select),不能使用DDL(create/drop/alter)操作触发器中不能使用commit,触发器操作与触发事件一起 commit和bollback表上触发器多的话,对dml操作性能影响越大触发器最大为32K3)谓词 在触发多个事件时insert/update/delete 为了区分触发事件insertingupdatingdeletingg
触发器管理:
-- 禁用触发器 alter trigger 触发器名称 disable; -- 启用触发器 alter trigger 触发器名称 enable; -- 编译触发器 alter trigger 触发器名称 compile; -- 删除触发器 drop trigger 触发器名称:
DML触发器示例:
CREATE OR REPLACE TRIGGER WW.SAMPLE_GRAPH_TRIafter update OR delete ON WW.SAMPLE for each row beginif updating theninsert into WW.SAMPLE_HIS(trg_type,id,name)values('update',:old.id,:old.name)elsif deleting theninsert WW.SAMPLE_HIS(trg_type,id,name)values('delete',:old.id,:old.name)elsif inserting theninsert WW.SAMPLE_HIS(trg_type,id,name)values('insert',:old.id,:old.name)end if;exceptionwhen case_not_found thendbms_output.put_line('case error');when others then dbms_output.put_line(sqlcode ||':'||sqlerrm); end;