************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************

触发器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;

************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************

【PLSQL】触发器trigger类型,状态,參数的更多相关文章

  1. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  2. Objective-C学习笔记(二十一)——函数的返回值与參数类型

    我们在之前的博客中涉及到的函数都没有參数,同一时候返回值也为void,即不须要返回值. 可是在以后的开发中.函数返回值和參数是必须涉及到的. 所以如今我们来讨论这个问题.我们还是以People类为例. ...

  3. springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定

    springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...

  4. [javase学习笔记]-6.5 类类型參数与匿名对象

    这一节我们来说说类类型參数和匿名对象. 我们继续用之前的小汽车类吧 class Car { int num;//这是轮胎数属性 String color;//这是颜色属性 String brand;/ ...

  5. java參数传递机制浅析

    欢迎转载,转载请声明出处! ----------------------------------------- 前言: java语言中,參数的传递仅仅有一种机制.那就是值传递. 举例: 以下将通过几个 ...

  6. Java參数传递方式

    原文:http://blog.sina.com.cn/s/blog_59ca2c2a0100qhjx.html,我作了些改动并添加了一个实例,添加对照 本文通过内存模型的方式来讨论一下Java中的參数 ...

  7. Effective JavaScript Item 21 使用apply方法调用函数以传入可变參数列表

    本系列作为Effective JavaScript的读书笔记. 以下是一个拥有可变參数列表的方法的典型样例: average(1, 2, 3); // 2 average(1); // 1 avera ...

  8. [MySQL] Innodb參数优化

    innodb_buffer_pool_size innodb_buffer_pool_size 參数用来设置Innodb 最基本的Buffer(Innodb_Buffer_Pool)的大小,也就是缓存 ...

  9. C语言变长參数的认识以及宏实现

    1.认识 变长參数是C语言的特殊參数形式.比如例如以下函数声明: int printf(const char *format, ....); 如此的声明表明,printf函数除了第一个參数类型为con ...

随机推荐

  1. testNG中方法的调用顺序

    今天在执行selnium的test case时,总是遇到空指针错误.但是以前也有run成功过,然后换了各种方法定位元素,都失败了,所以怀疑应该不是元素定位不到的问题,所以可能是method之间有依赖, ...

  2. Hadoop MapReduce编程 API入门系列之wordcount版本3(七)

    这篇博客,给大家,体会不一样的版本编程. 代码 package zhouls.bigdata.myMapReduce.wordcount3; import java.io.IOException; i ...

  3. 同一sql程序执行比数据库执行慢

    最近项目发现同一个sql在java端执行比在数据库执行慢很多,原因可能是程序的sql参数类型与数据库字段的类型不一致.

  4. ManualResetEvent和AutoResetEvent的区别,分享来的

    在讨论这个问题之前,我们先了解这样一种观点,线程之间的通信是通过发信号来进行沟通的.(这不是废话) 先来讨论ManualResetEvent,讨论过程中我会穿插一些AutoResetEvent的内容, ...

  5. Android Google 地图 API for Android

    从健康类 app Runkeeper 到游戏 app 精灵宝可梦,位置服务对现代 app 来说越来越重要. 在本文中,我们将创建一个 app,名字就叫做 City Guide.这个 app 允许用户搜 ...

  6. 【Arduino】基于arduino的激光坦克

    历经了总共40来个小时,终于将这个激光坦克做好了. 这是本人的第一件像样的arduino作品. 用arduino为主控制器,配有32路舵机驱动板(在这有些大材小用了),以及一个wr703n的路由器当做 ...

  7. Win8.1应用开发之适配器模式(C#实现)

    实际上适配器模式是用于解耦.设想一下我们的程序模块A在与模块B打交道时,需要在许多地方多次使用B中某个类的方法,而负责开发B的程序猿Tom还未完全实现该类,会随时更改该类中的方法,那么当Tom在修改时 ...

  8. 改造PAXOS算法消灭活锁

    分布式一致性协议的目的是确定一个不可变变量分布式存储的取值:通过对国内外一致性算法的研究成果和PAXOS协议活锁的分析,发现引入一个角色作为竞争时的代理提交者就可以解决活锁问题,从而在本文引入“代理提 ...

  9. 深入jar包:从jar包中读取资源文件

    我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看 ...

  10. CorelDRAW三十周年庆典暨2019新耀发布会,诚邀您的莅临!

    30年时光荏苒!眨眼风惊雨过. 在1989年的春天,CorelDRAW 1.0正式发布,一经面世就掀起了图形设计行业革命浪潮,这个图形工具不仅给设计师提供了矢量图像.页面设计,更能应用于网站制作.位图 ...