使用 Oracle Instead of 触发器

原创 2007年09月27日 21:56:00

今天在论坛上遇到个触发器的问题,需求如下:

向一个表中插入一条新记录 如(2007 ,a)
触发器  查询该表中如果有(2007 ,a)这条数据就更新这条数据中的另一个字段  如果没有就插入一条新记录触发器
  if(如果存在)
    更新记录
  else
    插入新记录

由于本人也不经常写复杂的触发器,经过一番尝试终于得出结论.如果想要中止触发动作在oracle里面似乎只能抛出异常,否则是无法实现的,只有使用Instead of 才行,于是建立视图

create or replace view vw_ayear as
select "YR","STARTFLAG","STARTDATE","CLOSETAG","TURNFLAG" from ayear
然后在写触发器

CREATE OR REPLACE TRIGGER ayear_TR
INSTEAD OF INSERT
ON vw_ayear
FOR EACH ROW
DECLARE TEMP INT ;
 BEGIN
  select 0 into TEMP from dual;
  select count(*) into TEMP from ayear a where a.yr=:new.yr and a.startflag=:new.startflag;
  IF TEMP <> 0 THEN
   UPDATE ayear a SET a.startdate = :new.startdate , a.closetag=:new.closetag , a.turnflag=:new.turnflag
     where a.yr=:new.yr and a.startflag=:new.startflag;
 ELSE
     insert into ayear values(:new.yr,:new.startflag,:new.startdate,:new.closetag,:new.turnflag);
 END IF;
 END;
 
最后测试

insert into vw_ayear values('2008','1',to_date('2007-04-01','yyyy-MM-dd'),'0','0')

  触发器里面不能有commit,rollback的操作  
  无法操作触发器所在的这个表,不管是before 还是after
  唯一的方法就是在不满足条件时人工抛出一个错误

还有就是使用视图了,呵呵,不知道说的对不对如果错了还请高人赐教.


oracle INSTEAD OF 触发器

INSTEAD OF 触发器只作用于视图上,不能作用
  • feier7501
  • feier7501
  • 2014年04月07日 22:12
  • 767

SQL AFTER触发器和INSTEAD OF触发器的区别

原址:http://bbs.csdn.net/topics/300074591     by  qianjin036a-晴天 INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行IN...
  • zark721
  • zark721
  • 2017年04月23日 11:05
  • 496

after触发器和instead of 触发器的区别

AFTER 触发器(也叫“FOR”触发器)会在触发 insert、update 或是delect 动作之后执行。例如,一个 Employees 表上的 AFTER 触发器会在在 Employee 表上...
  • jim_won
  • jim_won
  • 2013年03月12日 13:40
  • 5246

INSTEAD OF 触发器的使用陷阱

对于两张表以上关联起来的视图,Oracle是分不出来应该对哪个表进行更新       而INSTEAD OF 触发器实现了我们对视图DML的需求,显示的告诉告诉Oracle要更新哪个表       和...
  • linwaterbin
  • linwaterbin
  • 2013年01月17日 13:39
  • 1679

触发器五(建立INSTEAD OF触发器)

INSTEAD OF触发器 对于简单视图,可以直接执行INSERT,UPDATE和DELETE操作 但是对于复杂视图,不允许直接执行INSERT,UPDATE和DELETE操作。 为了在具有...
  • HUXU981598436
  • HUXU981598436
  • 2015年01月27日 18:35
  • 336

AFTER触发器和Instead Of触发器区别

转自:http://bbs.csdn.net/topics/300074591 INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作...
  • ncut_LJD
  • ncut_LJD
  • 2017年04月10日 14:26
  • 88

oracle数据库触发器(trigger)用法总结

http://yedward.net/?id=116   触发器的意思就是当我们对数据库对象(一般是表或视图)进行insert、update、delete操作的时候,这些操作会相应的触发一些事件的...
  • zhanzhib
  • zhanzhib
  • 2015年09月25日 10:12
  • 10162

Oracle触发器(trigger):一般用法

trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些...
  • weiwenhp
  • weiwenhp
  • 2013年06月26日 17:46
  • 37878

Oracle触发器用法实例详解

oracle
  • shmilychan
  • shmilychan
  • 2016年12月21日 17:32
  • 2354

Oracle 中序列(sequence)和触发器(trigger)的使用

在开始正题前,先加一点关于 oracle client sqlplus 的使用,就是如果执行多行语句的话一定要加 “/” 才能表示结束并执行。 本次的目的是通过创建序列和触发器实现表的主键自增。...
  • iw1210
  • iw1210
  • 2013年03月13日 10:01
  • 2984
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 Oracle Instead of 触发器
举报原因:
原因补充:

(最多只允许输入30个字)