【PLSQL】触发器trigger类型,状态,参数

************************************************************************
  ****原文: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 徐长亮的专栏
************************************************************************
时间: 2024-11-10 08:12:27

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

【PLSQL】触发器trigger类型,状态,參数

************************************************************************   ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************ 触发器trigger 希望在做DML操作时.不须要要提供主键值.系统自己主动生成 DML触发器的组成由四部分: 组成部分: 1. 

plsql触发器

11 数据库的触发器trigger 定义:根据发生的事件而执行的一种存储子程序 数据库事件:DML事件.DDL事件.用户事件.系统事件触发器分类:DML触发器.DDL触发器.系统用户事件触发器 11.1 触发器的创建 (1) DML触发器 A insert事件 create or replace trigger ai_org_trig   before insert on org_tab  for each rowbegin   update sec_hrc_audit set num_rows

PL-SQL 触发器

 触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. ①触发器类型 触发器在数据库里以独立的对象存储,它与存储过程不同的是,存储过程通过其它程序来启动运行或直接启动运行,而触发器是由一个事件来启动运行. 即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing). ORACLE事件指的是对数据库的表进行的INSERT.UPDATE及DELETE操作或对视图

MySQL 触发器trigger

一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 语法: create trigger triggerName after/before insert/update/delete on 表名 for each row   #这句话在mysql是固定的 begin sq

Mysqldump参数大全 这 些参数 不同于 mysql 的那些参数(下边文章开头有链接) :2 种类型的参数含义是不一样的

Mysqldump参数大全  这 些参数 不同于 mysql 的那些参数  :2 种类型的参数含义是不一样的 Mysqldump参数大全(参数来源于mysql5.5.19源码) 参数 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导出全部表空间. mysqldump -uroot -p --all-databases --all-tablespaces -

mysql触发器trigger 实例详解

MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志表],当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中

Quartz(自动任务)中的触发器Trigger

1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.quartz.Trigger 类.当前,Quartz 有三个可用的 Trigger: Java代码 ·org.quartz.SimpleTrigger ·org.quartz.CronTrigger ·org.quartz.NthIncludeDayTrigger 2.SimpleTrigger的介绍正如

zabbix------定义触发器trigger与动作action

1 一个完善的监控系统需要一定的告警机制,什么时候告警需要触发器,怎么告警,在什么情况下如何告警取决于action 2 定义trigger 我是确定最近3秒传送流量大于50M的时候NIC.trigger.transfer状态转变为warning 3 定义action,也即当trigger状态变化后,就执行该任务 确定action的名称 然后修改情况,什么条件会触发这个action,满足trigger状态为problem 然后设置操作,比如发送邮件给系统用户的liuliancao 这是后去下载一个

mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的

mysql命令行参数  --- 这些参数不同于  mysqldump  后的 那些参数   :2种类型的参数 含义是不一样的 一,mysql命令行参数 Usage: mysql [OPTIONS] [database] //命令方式 -?, --help //显示帮助信息并退出 -I, --help //显示帮助信息并退出 --auto-rehash //自动补全功能,就像linux里面,按Tab键出提示差不多,下面有例子 -A, --no-auto-rehash //默认状态是没有自动补全功能