----start
触发器和一个特定的表相关联,当向表中INSERTT、UPDATE、DELETE记录时,触发器会自动激活执行一些预定义的行为。
一:语法:
.-NO CASCADE-. >>-CREATE TRIGGER--trigger-name--+-+------------+--BEFORE-+-----> +-AFTER------------------+ '-INSTEAD OF-------------' >--+-INSERT--------------------------+--ON--+-table-name-+------> +-DELETE--------------------------+ '-view-name--' '-UPDATE--+---------------------+-' | .-,-----------. | | V | | '-OF----column-name-+-' >--+------------------------------------------------------------------+--> | .-------------------------------------------------. | | V (1) (2) .-AS-. | | '-REFERENCING------------------+-OLD--+----+--correlation-name-+-+-' | .-AS-. | +-NEW--+----+--correlation-name-+ | .-AS-. | +-OLD TABLE--+----+--identifier-+ | .-AS-. | '-NEW TABLE--+----+--identifier-' >--+-FOR EACH ROW--------------+--| triggered-action |---------> | (3) | '--------FOR EACH STATEMENT-' triggered-action |--+-------------------------------------+----------------------> | (4) | '--------WHEN--(--search-condition--)-' 说明: 一:触发器类型 1、前触发器(BEFORE):在insert、update、delete之前激活,主要用来验证、改变插入或更新的值。 2、后触发器(AFTER):在insert、update、delete之后激活,主要用来实现一些业务逻辑。 3、替代触发器(INSTEAD OF):在视图中定义,该触发器中定义的逻辑会替代视图中的触发SQL 语句。 二:事件类型:DELETE、DELETE、UPDATE 三:对象类型 1、表:可以定义BEFORE、AFTER触发器 2、视图:可以定义BNSTEAD OF触发器 四:引用 1、OLD:引用改变之前的单行 2、NEW:引用改变之后的单行 3、OLD TABLE:引用改变之前的多行 4、NEW TABLE:引用改变之后的多行 五:应用范围 1、FOR EACH ROW:对改变的每行调用一次触发器 2、FOR EACH STATEMENT:每条SQL调用一次触发器 六:激活条件(WHEN):只有符合条件时,触发器才会执行。
二:示例:
--连接数据库 CONNECT TO SAMPLE; --创建表USER CREATE TABLE USER ( NAME VARCHAR(20) NOT NULL,--姓名 SALARY FLOAT,--工资 LASTUPDATEDDT TIMESTAMP--最后修改时间 ); --创建USER的历史表 CREATE TABLE USER_HIS ( NAME VARCHAR(20) NOT NULL,--姓名 SALARY FLOAT,--工资 LASTUPDATEDDT TIMESTAMP,--最后修改时间 OPERATETIME TIMESTAMP,--操作时间 OPERATETYPE CHAR(1)--操作类型(INSERT、UPDATE) ); --USER表的LASTUPDATEDDT总是由数据库自动赋值 CREATE TRIGGER USER_INS1 NO CASCADE BEFORE INSERT ON USER REFERENCING NEW AS NNN FOR EACH ROW MODE DB2SQL SET NNN.LASTUPDATEDDT = CURRENT TIMESTAMP; CREATE TRIGGER USER_UPD1 NO CASCADE BEFORE UPDATE ON USER REFERENCING NEW AS NNN FOR EACH ROW MODE DB2SQL SET NNN.LASTUPDATEDDT = CURRENT TIMESTAMP; --每当更改USER表时,自动记录到历史表中 CREATE TRIGGER USER_INS2 AFTER INSERT ON USER REFERENCING NEW AS NNN FOR EACH ROW MODE DB2SQL INSERT INTO USER_HIS VALUES (NNN.NAME,NNN.SALARY,NNN.LASTUPDATEDDT,CURRENT TIMESTAMP,'I'); CREATE TRIGGER USER_UPD2 AFTER UPDATE ON USER REFERENCING NEW AS NNN FOR EACH ROW MODE DB2SQL INSERT INTO USER_HIS VALUES (NNN.NAME,NNN.SALARY,NNN.LASTUPDATEDDT,CURRENT TIMESTAMP,'U'); --USER_HIS表不允许任何修改 CREATE TRIGGER USER_HIS_UPD1 NO CASCADE BEFORE UPDATE ON USER_HIS FOR EACH ROW WHEN (1=1) SIGNAL SQLSTATE VALUE '71001' SET MESSAGE_TEXT = 'USER_HIS 表不允许更新'; CREATE TRIGGER USER_HIS_DEL1 NO CASCADE BEFORE DELETE ON USER_HIS FOR EACH ROW WHEN (1=1) SIGNAL SQLSTATE VALUE '71001' SET MESSAGE_TEXT = 'USER_HIS 表不允许删除'; --测试 INSERT INTO USER (NAME,SALARY,LASTUPDATEDDT) VALUES ('张三',2000.0,'2009-8-18 12:25:00'), ('李四',3500.0,'2009-12-18 12:25:00'); SELECT * FROM USER; SELECT * FROM USER_HIS; DELETE FROM USER_HIS; --删除 DROP TRIGGER USER_INS1; DROP TRIGGER USER_UPD1; DROP TRIGGER USER_INS2; DROP TRIGGER USER_UPD2; DROP TRIGGER USER_HIS_UPD1; DROP TRIGGER USER_HIS_DEL1; DROP TABLE USER; DROP TABLE USER_HIS; --关闭连接 CONNECT RESET;
三:调用示例:
将示例的内容保存为c:/test.sql,然后在DB2 命令窗口中执行如下命令 db2 -tvf c:/test.sql
----更多参见:SQL PL 精萃
----声明:转载请注明出处。
----last updated on 2010.2.9
----written by ShangBo on 2010.2.9
----end
Apex触发器类似于在特定事件发生时执行的存储过程。 在记录事件发生之前和之后执行触发器。 语法 (Syntax) trigger triggerName on ObjectName (trigger_events) { Trigger_code_block } 执行触发器 以下是我们可以触发的事件 - insert update delete merge upsert undelete 触发示
主要内容:语法,实例,列出触发器(TRIGGERS),删除触发器(TRIGGERS)SQLite 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于 SQLite 的触发器(Trigger)的要点: SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。 SQLite 只支持 FOR EACH ROW 触发器(Trigger
PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。 下面是关于 PostgreSQL 触发器几个比较重要的点: PostgreSQL 触发器可以在下面几种情况下触发: 在执行操作之前(在检查约束并尝试插入、更新或删除之前)。 在执行操作之后(在检查约束并插入、更新或删除完成之后)。 更新操作(在对一个视图进行插入、更新、删除时)。 触发器的 FOR EAC
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。 因此触发器不需要人为的去调用,也不能调用。触发器的触发条件其实在定义的时候就已经设定好了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。 触发器的基础知识和示例: Oracle之前插入触发器 - https://www.xnip.cn/oracle/before_insert.html Oracle之后插
触发器与函数绑定,不同类型的触发器有不同的格式,当您配置了触发器后,在满足特定条件时函数将会自动触发。目前函数计算支持以下3种触发器,分别是: HTTPTrigger : 您可以自定义一个REST API,将API的操作(支持GET和POST请求方式)绑定到当前函数上,您可以通过HTTPS在浏览器或终端向该API进行访问,HTTPTrigger会调用对用的函数。 TimeTrigger : 当您需
本文向大家介绍MySQL触发器 Update触发Insert失败,包括了MySQL触发器 Update触发Insert失败的使用技巧和注意事项,需要的朋友参考一下 今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表 于是进行测试 执行触发器语句,报错,报错内容如下: 分析,由于访问工具HediSQL,导致无法正常创建触发器,相同语句,
SQL Server触发器是特殊的存储过程,它们会自动执行以响应数据库对象,数据库和服务器事件。 SQL Server提供三种类型的触发器: 数据操作语言(DML)触发器,它们响应针对表的INSERT,UPDATE和DELETE事件而自动调用。 数据定义语言(DDL)触发器响应CREATE,和DROP语句而触发。 DDL触发器也会响应执行类似操作的某些系统存储过程而触发。 登录触发器以响应事件而触