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. Android util.Log 工具类

    Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v().用于打印那些最为琐碎的.意义最小的日志信息.对应级别verbos ...

  2. JAVA泛型使用方法总结

    1. 基本概念: (1)什么是泛型? 泛型,即"参数化类型".即将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用或 ...

  3. 介绍一种非常好用汇总数据的方式GROUPING SETS

    介绍 对于任何人而言,用T-SQL语句来写聚会查询都是工作中重要的一环.我们大家也都很熟悉GROUP BY子句来实现聚合表达式,但是如果打算在一个结果集中包含多种不同的汇总结果,可能会比较麻烦.我将举 ...

  4. 51Nod 1225 余数之和 [整除分块]

    1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...

  5. XSD详解一 - 基本概念

    本分类下的文章主要是对W3School的文档进行整理:http://www.w3school.com.cn/x.asp XML Schema 是基于 XML 的 DTD 替代者. XML Schema ...

  6. SpringMVC之HelloWorld实例

    1.1 Helloworld实例的操作步骤  1. 加入jar包 2. 配置dispatcherServlet 3. 加入Spring配置文件 4. 编写请求处理器 并表示为处理器 5. 编写视图 1 ...

  7. win10安装elementary os双系统

    elementary os是ubuntu的一个分支,界面有点像苹果,比较漂亮.如图: 从已有的磁盘中划出一块空白分区,将elementary单独安装在这个分区里,这个分区需要比其他分区的剩余空间都要大 ...

  8. 基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD

    完成一个RESTful服务,提供几个访问接口,用来操作较简单的联系人信息,数据保存在Sql Server数据库中. 1.使用STS创建工程. 使用STS创建RESTful工程,可以参考: <用S ...

  9. NFS配置及使用

    什么是NFS NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享存储.在NFS的应用中,本地NFS ...

  10. 收藏清单: python测试框架最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...