使用 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多表可更新视图的实现

多表视图的定义:当视图的数据源只有一张数据表,则该视图为单表视图;当视图的数据源是多张数据表,则该视图为多表视图。 可更新视图的定义:在绝大多数人的概念中,视图是只读的,不允许修改。ORACLE 8i...
  • lcj8
  • lcj8
  • 2008-05-15 00:08
  • 3336

UPDATE可以更新视图吗

视图可以被UPDATE吗         今天在工作过程中发现一个问题,进过排查发现原来是一个视图被update操作,开始比较不能理解视图为何被修改,通过查询资料,并进行验证发现:当Oracle数据...

Update视图数据(oracle)

一般说起视图第一反应就是无法对

oracle INSTEAD OF 触发器

INSTEAD OF 触发器只作用于视图上,不能作用

ORA-01779: 无法修改与非键值保存表对应的列,bug

"ORA-01779: 无法修改与非键值保存表对应的列"问题(2009-09-21 14:04:53)转载标签:it分类:计算机这几天在一个老生产系统中出现了一个问题,在修改数据的时候报错: no c...

ORACLE触发器详解

ORACLE PL/SQL编程之八:  把触发器说透    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创...

关于 INSTEAD OF 触发器

快生三星了,好歹也得在CSDN上留点什么以示水平不低吧,但总是不知道该写什么,只善于回答问题,不善于总结问题。近来在坛子上经常看到有问触发器的,而且大多是要求实现在一定条件下不向表中进行操作的触发器,...

关于 INSTEAD OF 触发器

http://blog.csdn.net/qianjin036a/article/details/6136588  快生三星了,好歹也得在CSDN上留点什么以示水平不低吧,但总是不知道该写什么,只善...

SQL触发器(AFTER和INSTEAD OF)

转自:http://www.cnblogs.com/shepherldeng/archive/2010/06/23/1763766.html 何为触发器:触发器是数据库服务器中发生事件时自动执行...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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