触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,不能带参数,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
Oracle触发器语法
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。
功能:
1、 允许/限制对表的修改
2、 自动生成派生列,比如自增字段
3、 强制数据一致性
4、 提供审计和日志记录
5、 防止无效的事务处理
6、 启用复杂的业务逻辑
触发器触发时间有两种:after和before。
1、触发器的语法:
CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件
ON表名
[FOR EACH ROW]
BEGIN
pl/sql语句
END
其中:
触发器名:触发器对象的名称。
触发时间:指明触发器何时执行,该值可取:
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
事务的特性:
事务具有ACID四大特性:
某种意义上说,原子性是手段,一致性是目的,通过原子性的手段达到一致性的目的。
A:原子性: 做都做 不做都不做-------手段
C:一致性: 做事务操作的前后,数据保持一致性-----目的
I: 隔离性: 隔离性越强,并发性越弱
---------用for update 来实现事务的隔离性 通过锁的特性:
|
是一个加锁过程
D:永久性:同一个事务在commit 之后不能rollback
oracle中 DML语言 发生时 oracle 只操作内存,并不能自动提交
行触发器的工作原理是 俩个重要的内存表
old new
insert ---- ok
update ok ok
delete ok ----
:new --为一个引用最新的列值;
:old --为一个引用以前的列值; 这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old;
实例
--drop trigger trig_account_spittor
create or replace trigger trig_account_spittor
after insert or update
of spittor_id,amount,status
on spittor_account
for each row
begin
if :new.status=1 then
if inserting then
update spittor set balance=(balance+:new.amount) where id=:new.spittor_id;
end if;
end if;
commit;
end;
--drop trigger trig_spittor_order
create or replace trigger trig_spittor_order
after insert or update
of id,spittor_id,name,total_price,type,status
on spittor_order
for each row
begin
if :new.status=1 then
if inserting then
if :new.type=1 then
insert into spittor_account(id,order_id,spittor_id,amount,fiinsh_date,status)values(seq_spittoraccount.nextval,:new.id,:new.spittor_id,:new.total_price,sysdate,:new.status);
elsif :new.type=2 then
insert into spittor_account(id,order_id,spittor_id,amount,fiinsh_date,status)values(seq_spittoraccount.nextval,:new.id,:new.spittor_id,-:new.total_price,sysdate,:new.status);
end if;
elsif updating then
if
ld.status=1 then
dbms_output.put_line('warning:this order is also done it....');
else
if :new.type=1 then
insert into spittor_account(id,order_id,spittor_id,amount,fiinsh_date,status)values(seq_spittoraccount.nextval,:new.id,:new.spittor_id,:new.total_price,sysdate,:new.status);
elsif :new.type=2 then
insert into spittor_account(id,order_id,spittor_id,amount,fiinsh_date,status)values(seq_spittoraccount.nextval,:new.id,:new.spittor_id,-:new.total_price,sysdate,:new.status);
end if;
end if;
end if;
end if;
end;
分享到:
相关推荐
SQL2005触发器简介.pdf
sqlserver2005学习笔记之触发器简介.pdf
本文实例讲述了mysql触发器简介、创建触发器及使用限制。分享给大家供大家参考,具体如下: 简介 SQL触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,即会执行或触发SQL触发器,例如插入,...
详细介绍了数据库触发器的原理 与开发 使读者能够快速的掌握数据库触发器的开发技术
对mysql触发器从创建步骤到使用过程中注意的事项做了详细的介绍,让你很快的掌握mysql触发器的使用技巧
1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三:INSTEAD OF触发器 6 7,例四:语句级触发器之一 8 8,例五:语句级触发器之二 9 9...
一、触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时候就已经设定好了。这里面...
● 原因 ● 触发器 ○ 简介 ○ 分类 ○ INSERTED和DELETED ○ 优缺点 ● 语法 ... 触发器简介: 触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启
数据库 存储过程 触发器 基本简介
2 触发器简介 MySQL触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE、DELETE。如果定义了触发器,当数据库执行这些语句的时候就会激活触发器执行相应...
触发器 trigger简介,原理和一些使用示例
mysql触发器语法简介[归类].pdf
数字逻辑电路 常用触发器IC简介.doc 学习资料 复习资料 教学资源
16.1.1 触发器简介 325 16.1.2 触发器执行环境 325 16.2 sql server中的触发器 326 16.2.1 sql server触发器的种类 326 16.2.2 使用create trigger命令创建触发器 326 16.2.3 insert触发器 328 16.2.4 delete...
16.1.1 触发器简介 16.1.2 触发器执行环境 16.2 SQL Server中的触发器 16.2.1 SQL Server触发器的种类 16.2.2 使用CREATE TRIGGER命令创建触发器 16.2.3 INSERT触发器 16.2.4 DELETE触发器 16.2.5...
开发触发器 13.1 触发器简介 13.2 建立DML触发器 13.2.1 语句触发器 13.2.2 行触发器 13.2.3 使用DML触发器 13.3 建立INSTEADOF触发器 13.4 建立系统事件触发器 13.5 管理触发器...
内容简介概述单稳态触发器施密特触发器多谐振荡器PPT学习教案.pptx
4.8.1 触发器简介 4.8.2 DML触发器 4.8.3INSTEADOF触发器 4.8.4 系统触发器 4.8.5 触发器的管理 4.9 小结 第5章 Omele11g体系结构概述 5.1 存储结构 5.1.1 逻辑存储结构 5.1.2 物理...
手机同步的特征与简介_同步d触发器特征方程.docx