2.行级触发器的关联标识符 :new,:old

    >>1. 一般通过:new.filed 引用(filed是trigger_table的字段名)
:new :old中filed字段的意义
触发语句 :old  :new
    insert 未定义--所有字段为null 触发语句完成时,要插入的值
    update 更新以前相对应记录行的值 触发完成后,要更新的值
    delete 删除以前记录行的值         未定义-null

>>2. :new,:old的用法

create or replace trigger GenerateAuthorId
before insert on or update on Authors
for each row
begin
select author_sequence.nextval
into :new.ID --:new.ID表示触发完成后,要插入的值. 就是说将 -1改为nextval
from dual;
end GenerateAuthorId;
/ insert into authors(ID,first_name,last_name)
vaules(-1,'David','Zheng');

  新插入的ID的值将会是author_sequence.nextval不是-1.

  >>3.虽然:new,:old的类型是trigger_table%rowtype,但是不能整体赋值,只能为每一个属性赋值(有点像C中结构体)

create or replace trigger TempDelede
before delete on temp_table
for each row
declare
v_TempRec temp_table%rowtype
begin
v_TempRec:=old; --错误赋值,会编译报错
v_TempRec.char_col:=:old.char_col; --正确赋值
v_TempRec.num_col:=:old.num_col; --正确赋值
end TempDelede;
/

  >>3. referencing 子句
语法:referencing[old as old_name][new as new_name]
这样就可以用old_name代替:old。注意referencing 中都不带冒号,但是实际使用是还是要加冒号的。

create or replace trigger GenerateAuthorId
before insert on or update on Authors
referencing new as new_author --都不带冒号
for each row
begin
select author_sequence.nextval
into :new_author.ID --带冒号
from dual;
end GenerateAuthorId;
/

  >>4.when子句
when语句在行级触发器中起限制作用
when trigger_condition
new,old 在trigger_condition中都和referencing一样不加冒号

create or replace trigger CheckPrice
before insert or update of price on books
for each row
when (new.price>500.00) --new没加冒号
begin
DBMS_OUTPUT.PUT_LINE('price is higher than 500');
end CheckPrice;
/

  >>5.触发器谓词:inserting,updating,deleting
inserting,updating,deleting是布尔函数,在使用相应的触发器会返回True 或者False

谓词         行为特征
inserting 如果激活语句是insert,就为True,否则为False
updating 如果激活语句是update,就为True,否则为False
deleting 如果激活语句是delete,就为True,否则为False

eg.当改变inventory表时,使用invent_audit表记录 更改的用户名,更改的类型,更改了什么

create table inventory_audit(
change_type char(1) not null,
change_by varchar2(8) not null,
timestramp date not null,
old_isbn char(10),
new_isbn char(10),
old_status varchar(25),
new_status varchar(25),
old_amount varchar(25),
new_amount varchar(25)
); ---创建 inventory_audit create or replace LogInventoryChanges
before insert or update or delete on inventory
for each row
declare
v_ChangeType char(1);
begin
if inserting then v_ChangeType='I' --用I表示Insert
elsif updating then v_ChangeType='U'
else v_ChangeType='D'
insert into inventory_audit( --将改变的状态插入到inventory_audit表中
change_type,change_by,timestamp,
old_isbn,new_isbn,old_status,new_status,old_amount,new_amount
)
vaules(
v_ChangeType,user,sysdate,
:old.isbn,:new.isbn,:old.status,:new.status,:old.amount,:new.amount
)
end LogInventoryChanges;
/

DML 触发器2的更多相关文章

  1. SQL Server 数据库DML触发器 【一】

    今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内 ...

  2. 杂谈--DML触发器学习

    触发器按类型分为三类: 1. DML 触发器,在数据变更时触发: 2. DDL 触发器,在修改数据库级别或实例级别对象时触发: 3. Login 触发器,在用户登录时触发: 最常见的是DML触发器,D ...

  3. DML触发器1

    数据库触发器是特殊的存储程序.通常不直接调用它们,而是由数据库的事件触发. 触发器分类: >DML触发器 >instead-of触发器 >系统事件触发器,还可以是DDL 一. DML ...

  4. SQL语句(二十一)—— 触发器(DML触发器)

    触发器 一 .触发器概述(特殊的存储过程) 定义: 在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用. 作用: ...

  5. 触发器三(行级DML触发器)(学习笔记)

    行级DML触发器 每当一条记录出现更新操作时进行触发操作定义时要定义FOR EACH ROW 使用":old.字段"和":new.字段"标识符 No. 触发语句 ...

  6. 触发器二(DML触发器)(学习笔记)

    DML触发器(语句触发器) 由DML语句进行触发,当用户执行了INSERT,UPDATE,DELETE操作时就会触发操作 示例一.只有在每个月的10日才允许办理,新员工入职与离职,其他时间不允许增加和 ...

  7. 监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)

    原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2) 在有些公司中,由于管理的不规范,或者是便于开发人员直接修改.部署程序,往往任何开发人员,都能登录到生产 ...

  8. 今天说一下DML触发器的顺序

    因为05之后的版本允许了一个对象有多个after触发器,所以呢~顺序方面还是要留意一下下的.比如我现在要往一个测试表里面添加多个触发器. USE Test GO ,),Name )) GO CREAT ...

  9. 创建dml触发器

    -实现删除学生信息时把该学生的成绩记录全部清空 --判断触发器是否存在 if exists(select * from sysobjects where name = 'delete_student' ...

随机推荐

  1. SQL Server中计算表达式的和

    项目使用的是SQL Server数据库,需要做一个审核规则,字段A中表达式的值和字段B中的值,做比较: 需求本身很简单,但是表达式中存在很多非法字符(非法全角,运算符,汉字--) eg:1.1.1*2 ...

  2. Selenium UI自动化解决iframe定位问题

      更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6735116.html 一个阴雨霏霏 ...

  3. es数据恢复杂记

    kill -9或者断电等原因异常,es在重启后,会通过translog来进行数据恢复. 默认的恢复速度是较慢的,可以设置indices.recovery.current_streams:10增大恢复的 ...

  4. bzoj 3864: Hero meet devil [dp套dp]

    3864: Hero meet devil 题意: 给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问 有多少个只由AGCT组成的长度为m(1 ≤ m ≤ ...

  5. BZOJ 2006: [NOI2010]超级钢琴 [ST表+堆 | 主席树]

    题意: 一个序列,求k个不相同的长度属于\([L,R]\)的区间使得和最大 前缀和,对于每个r找最小的a[l] 然后我yy了一个可持久化线段树做法...也许会T 实际上主席树就可以了,区间k小值 然后 ...

  6. 从细菌GFF文件提取CDS序列并转换为氨基酸序列

    最近在上生物信息学原理,打算记录一些课上的作业.第一次作业:如题. 基本思路: 1.从GFF中读取CDS的起始终止位置以及正负链信息.GFF格式见http://blog.sina.com.cn/s/b ...

  7. 使用 RxJS 实现一个简易的仿 Elm 架构应用

    使用 RxJS 实现一个简易的仿 Elm 架构应用 标签(空格分隔): 前端 什么是 Elm 架构 Elm 架构是一种使用 Elm 语言编写 Web 前端应用的简单架构,在代码模块化.代码重用以及测试 ...

  8. yii2 源码分析 model类分析 (五)

    模型类是数据模型的基类.此类继承了组件类,实现了3个接口 先介绍一下模型类前面的大量注释说了什么: * 模型类是数据模型的基类.此类继承了组件类,实现了3个接口 * 实现了IteratorAggreg ...

  9. 中小研发团队架构实践之应用监控Metrics

    一.Metrics简介        应用监控系统Metrics由Metrics.NET+InfluxDB+Grafana组合而成,通过客户端Metrics.NET在业务代码中埋点,Metrics.N ...

  10. JAVA死锁

    死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不能正常运行. 简单的说就是:线程死锁时,第一个线程等待第二个线程释放资源,而同时第 ...