ORACLE触发器
ORACLE触发器(trigger)的使用1、触发器说明 触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用 2、触发器类型 根据触发器所创建的语句及所影响的对象的不同,将触发器分为以下3类 (1)DML触发器 对数据表进行DML语句操作(如insert、update、delete)时所触发的触发器,可以分为: 语句级触发器或行级触发器:行级触发器会对数据库表中的受影响的每一行触发一次触发器代码,语句级触发器则只触发一次,与语句所影响到的行数无关 before触发器或after触发器:before触发器在触发事件发生之前执行触发器代码,after触发器则在触发事件发生之后执行
语法解释: trigger_name:触发器名称 before | after : 指定触发器是在触发事件发生之前触发还暗示发生之后触发 trigger_event:触发事件,在DML触发器中主要为insert、update、delete等 table_name:表名,表示发生触发器作用的对象 for each row:指定创建的是行级触发器,若没有该子句则创建的是语句级触发器 when trigger_condition:添加的触发条件 trigger_body:触发体,是标准的PL/SQL语句块 ? (2)替代触发器(instead of触发器) 对视图进行操作时定义的触发器,替代触发器只能定义在视图上
? (3)系统事件触发器 对数据库实例或某个用户模式进行操作时定义的触发器,可以分为: 数据库系统触发器和用户触发器 ? 3、案例 (1)DML触发器 DML触发器的案例都是基于student表和stu_log表来进行的,所以先创建student表和stu_log表
?a、行级触发器(before触发器)
插入一条数据,但是不插入id insert into student(stu_no,stu_name,stu_age,stu_major) values(‘NO1‘,‘张三‘,20,‘中文系‘);
查询结果如下,自动生成id了 ? b、 行级触发器(after触发器)
查询stu_log表的结果如下,第3条update语句没有触发该触发器,因为触发器指定只有修改stu_name字段才会触发触发器 ?c、语句级触发器(before触发器):用来控制对表的修改
插入数据时报错如下,删除和修改数据同样也报错 ?d、语句级触发器(after触发器):略 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 编译错误:`’error_category’没有用g 6.3.0命名类型
- Quick-Cocos2d-x UI控件之进度条(UILoadingBar)控件
- 使用正则表达式模拟读写INI文件
- ruby-on-rails – 在Heroku上部署Ruby on Rails应用程序时出
- c – 这是一个安全的方法来实现一个通用的operator ==和ope
- ruby-on-rails – 在Rails 3.2应用程序中使用多个模型时,如
- c# – 系统测试与验收测试 – 测试用例的差异
- c#-4.0 – C#动态对象的模拟/存根框架
- XML之DTD(2)
- ruby-on-rails – 包含ActionDispatch :: TestProcess可防止