Oracle数据库触发器详解与实战

需积分: 9 2 下载量 170 浏览量 更新于2024-09-16 收藏 42KB DOC 举报
"这篇文档主要介绍了Oracle数据库中的触发器,包括触发器的种类、使用限制以及两个具体的DML触发器实例。" Oracle数据库的触发器是数据库对象,它允许在特定事件(如数据操纵语言DML操作或数据定义语言DDL操作)发生时自动执行预定义的SQL语句或PL/SQL代码块。触发器可以用于实现复杂的业务规则,监控数据变化,或者执行一些在常规SQL语句中不易实现的功能。 **触发器分类:** 1. **DML触发器**:这些触发器在对表进行INSERT、UPDATE或DELETE操作时被触发。例如,在实例1中创建的`dml_log`触发器,会在对`emp`表进行DML操作时记录操作类型、时间、用户信息等。 2. **DDL触发器**:当数据库中的结构发生变化,比如创建、修改或删除表、视图、索引等对象时,DDL触发器会被激活。 3. **数据库事件触发器**:响应数据库级别的事件,如登录、系统错误等。 4. **替代触发器**:替代触发器可以在DML操作前或后替换实际的DML操作,通常用于提供更精细的控制或实现自定义的行为。 **触发器的使用限制**: - 在触发器内部不能直接使用`COMMIT`、`ROLLBACK`和`SAVEPOINT`语句,因为这些操作可能会干扰事务的正常流程。 - 同样,触发器也不能直接或间接调用包含上述语句的存储过程和存储函数。 **DML触发器实例分析**: 实例1创建了一个名为`dml_log`的触发器,它是一个行级触发器,会根据操作类型(INSERT、UPDATE、DELETE)将相关信息插入到`event_record`表中。通过`BEFORE`关键字,我们确保在DML操作发生之前记录事件。 实例2展示了如何使用触发器来限制对数据的修改。`change_sal`触发器是一个在更新`emp`表的`sal`字段前触发的触发器。如果试图将一个员工的部门编号(`deptno`)改为非10,则触发器阻止这次更新操作,从而实现了只允许修改部门10员工工资的逻辑。 触发器是数据库设计中的一个重要工具,但应谨慎使用,因为过度依赖触发器可能导致应用程序的复杂性增加,性能下降,并可能隐藏了业务逻辑,使得维护和调试变得更加困难。在设计数据库解决方案时,应该充分权衡触发器的利弊,确保其符合整体的架构设计。