设为首页 加入收藏

TOP

【PLSQL】触发器trigger类型,状态,参数
2015-07-24 10:48:47 来源: 作者: 【 】 浏览:1
Tags:PLSQL 触发器 trigger 类型 状态 参数

触发器trigger

希望在做DML操作时,不需要要提供主键值,系统自动生成

DML触发器的组成由四部分:

组成部分:

1. 触发时间,描述:触发时间的时间次序,可能值:after,before

2. 触发事件,描述:DML语句是触发时间,可能值insert、update、delete

3. 触发器类型,描述:触发器被执行的次数,可能值statement,row

4. 触发体,描述该触发器将要执行的动作,可能值完整的PLSQL块

3.9.1DML触发器的类型

语句级触发器,行级触发器,

行级触发器和语句级触发器的区别:

1. 触发的次数不同,如果DML语句只影响一行,则语句级和行级触发器效果一样;

2. 如果影响多行,则行级触发器触发的次数比语句级触发器触发的次数多;

3.9.2 DML触发器的触发顺序

根据触发的时间,类型不同,可以组合为四种DML触发器,

1. 在sql语句执行之前执行一次:

a) 触发时间:before

b) 级别statement

2. sql语句影响的每条记录被uupdate,delete或者insert之前执行一次

a) 触发时间:before

b) 级别:row

3. sql语句影响的每条记录被update,delete或insert之后执行一次

a) 触发时间:after

b) 基本:row

4. sql语句执行之后执行一次

a) 促发时间:after

b) 级别:statement

3.9.2 DML行级触发器

for each row子句创建一个行级触发器,使其在受到触发器事件影响每一行都被触发,例如:

create or replace trigger trig_name

{before |after } insert [or update …]

on tab_name

for each row [when restricting_condition]

PLSQL block;

3.9.3 行级触发器:OLD和:NEW

在列名前加上:OLD标示符表示该列变化前的值,加上:NEW标示符表示变化后的值;

因此触发事件:

1. insert事件,:OLD.列名(所有的字段是NULL),:NEW.列名(insert语句要插入的值)

注:(存储过程:oracle:PLSQL,Pro*C, 数据库的值取出进行操作自后,要存放入数据库用存储过程)

2. update事件, OLD.列名(在update之前该列的原始值),NEW.列名(update语句要更细的新值),

3. delete事件,OLD.列名(delete行之前列的原始值),NEW.列名(所有字段为null);

3.9.4触发器的重新编译

如果触发器内调用其他函数或者过程,当它们被删除或修改后,触发器的状态被识别为无效;当DML语句激活一个无效触发器时候,oracle将重新编译触发器代码,如果编译时发现错误,这将导致DML语句执行失败;

手动编译:

alter trigger [schema.]trig_name compile;

2.9.5 触发器状态

有效状态:enable:

无效状态:disable

两种状态的转换:

alter trigger trig_name [disable | enable];

alter table语句则一次性改变与指定表相关的所有触发器的使用状态;

alter table [schema.]tab_name {enable |disable } ALL triggers;

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇postgreSQL使用笔记(本人公司用.. 下一篇sql连接错误(MicrosoftSQLServer..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)