Oracle DML触发器详解:语句与行级差异与应用
需积分: 0 176 浏览量
更新于2024-08-04
收藏 129KB DOCX 举报
Oracle触发器是数据库对象,它们与存储过程和函数相似,但由特定事件自动触发,而非用户显式调用。Oracle触发器主要分为DML触发器、DDL触发器、替代触发器和系统触发器,其中DML触发器根据操作类型细分为语句触发器和行级触发器。
1. **语句触发器**:
- 当执行insert、delete或update操作时,无论SQL语句影响了多少行数据,语句触发器只会触发一次,这意味着它处理的是整个操作,而不是单个行。
2. **行级触发器**:
- 这种触发器对每一条受影响的记录单独处理,与语句触发器相反。行级触发器使用`foreachrow`关键字,如`create trigger 用户名.触发器名 before insert on 表名 foreachrow`,每个SQL语句影响的每一行都会独立触发一次。
3. **DML触发器语法**:
- 语法包括以下几个部分:
- `before`或`after`:决定触发时间,分别为操作前或操作后执行。
- `delete`, `insert`, `update`, 或 `updateof`:指定触发操作类型,updateof用于限制只在特定字段被更新时触发。
- `on 表名`:触发器关联的表。
- `foreachrow`:表明触发器是行级的。
- `when 条件`:可选的条件,仅在满足时执行触发器。
4. **触发器谓词**:
- 在DML操作中,`old`和`new`是关键概念,分别代表操作前的数据状态和操作后的数据状态。例如,`old.columnname`用于获取更新前某一列的值,`new.columnname`用于获取更新后的值。
为了演示,假设创建了一个名为T_GIRL的表,并插入了测试数据,可以使用以下语句创建一个行级触发器,当插入新记录时检查某些条件:
```sql
CREATE OR REPLACE TRIGGER girl_insert_trigger
BEFORE INSERT ON T_GIRL
FOR EACH ROW
DECLARE
-- 定义变量
is_eligible BOOLEAN := :NEW.age > 18 AND :NEW.height >= 160;
BEGIN
IF is_eligible THEN
-- 执行特定操作,如记录符合条件的信息
DBMS_OUTPUT.PUT_LINE('Eligible candidate inserted.');
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Candidate not eligible.');
END IF;
END;
```
这只是一个基础示例,实际应用中可能需要根据业务需求设计更复杂的触发器逻辑。理解Oracle触发器的工作原理和不同类型的触发器对于数据库管理员和开发人员来说至关重要,它可以帮助实现数据完整性约束、审计跟踪等功能。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2022-11-12 上传
2021-10-01 上传
2011-01-06 上传
2022-11-21 上传
2012-10-21 上传
2013-03-09 上传
金山文档
- 粉丝: 32
- 资源: 306
最新资源
- 近探拓客软件-实现日更新的全国工商数据采集的工具-工商数据采集工具免费下载V21.4.1
- telescope_hoogle:望远镜的Hoogle搜索集成
- passwordGenerator:此分配使用math.random为用户生成密码
- dotnet C# 根据椭圆长度和宽度和旋转角计算出椭圆中心点的方法.rar
- ProjectManager:.NET Core中的简单项目管理
- Muzisung_FE:这是无知项目前端的存储库。
- Mysis_DVM_Modeling:我的高级论文项目“为 Diluviana 的 Diel 垂直迁移模式建模”的代码和头脑风暴。
- torch_spline_conv-1.2.1-cp36-cp36m-linux_x86_64whl.zip
- CMTraerPhysics:Traer v3.0物理引擎的Objective-CCocoa端口; 与iOS演示应用程序
- bilingual-pdf:由英文PDF生成双语PDF,回归原生加速长篇英文阅读!
- js-demo:关于本人博客中关于js的使用的代码示例
- 清水混凝土模板支撑施工方案.zip
- 来自“菜鸟教程”JavaScript实例练习【二】web.zip
- 仿天猫静态页面 登陆/注册/首页/天猫超市页/购物车/手机列表页 Tmall.zip
- 淘特新闻管理系统 v4.0.4
- Class-33