欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

,关于触发器

更新时间: 2014-01-05 02:11:51 责任编辑: Author_N1

 

求助,关于触发器
现在有表结构如下:
STATIONID   OBSTIME       INSERTTIME    RAINFALL    RAINFALLM10
1 2013/7/1 0:01:00 2013/7/1 0:05:00 1.00
2 2013/7/1 0:02:00 2013/7/1 0:05:00 2.00
3 2013/7/1 0:03:00 2013/7/1 0:05:00 3.00
.
.
.

stationid 和 obstime 是联合主键pk_rf1,现需要写一个触发器在本表插入新数据的时候,根据stationid和obstime自动累加过去十分钟rainfall的值并插入rainfallm10,自己写了一个触发器,可是不行,来求助各位,谢谢了!
我自己在网上到处搜,然后拼凑的,错在什么地方?怎么解决?
create or replace trigger aifer_rf1
before  update 
of obstime 
on rf1 for each row
begin
execute immediate 
'update rf1 set :new.rainfallm10=(
select sum(rainfall) from rf1 t2 where t2.obstime between rf1.obstime-9/1440 and rf1.obstime and rf1.stationid=t2.stationid and :new.pk_rf1 = :old.pk_rf1
)';
end;
--参考方法--

create or replace trigger aifer_rf1
before  update 
of obstime 
on rf1 for each row
begin
  :new.rainfallm10 := (
select sum(rainfall) from rf1 t2 
where t2.obstime between :new.obstime-1/144 and :new.obstime 
and t2.stationid=:new.stationid
)
end;
--不知道楼主需要跟新的到底是那些数据
--以上是跟新本条记录的
--ps:1/144才是10分钟

--参考方法--
SQL> CREATE TABLE rf1(stationid number, obstime date, inserttime date, rainfall number, rainfall10 number);
 
Table created
SQL> insert into rf1 values(1,to_date('20130701 00:01:00','yyyymmdd HH24:MI:SS'), sysdate, 1, 0);
 
1 row inserted
SQL> insert into rf1 values(1,to_date('20130701 00:02:00','yyyymmdd HH24:MI:SS'), sysdate, 1, 0);
 
1 row inserted
SQL> create or replace trigger aifer_rf1
  2  before  insert
  3  on rf1 for each row
  4  begin
  5  select sum(rainfall) into :new.rainfall10  from rf1 t2
  6  where t2.obstime between :new.obstime-9/1440 and :new.obstime
  7  and t2.stationid=:new.stationid
  8  ;
  9  end;
 10  /
 
Trigger created
SQL> insert into rf1 values(1,to_date('20130701 00:03:00','yyyymmdd HH24:MI:SS'), sysdate, 1, 0);
 
1 row inserted
SQL> select * from rf1;
 
 STATIONID OBSTIME     INSERTTIME    RAINFALL RAINFALL10
---------- ----------- ----------- ---------- ----------
         1 7/1/2013 12 12/19/2013           1          0
         1 7/1/2013 12 12/19/2013           1          0
         1 7/1/2013 12 12/19/2013           1          2
 
SQL> drop table rf1;
 
Table dropped
 
SQL> 

--参考方法--
引用:
Quote: 引用:


create or replace trigger aifer_rf1
before  update 
of obstime 
on rf1 for each row
begin
  :new.rainfallm10 := (
select sum(rainfall) from rf1 t2 
where t2.obstime between :new.obstime-1/144 and :new.obstime 
and t2.stationid=:new.stationid
)
end;
--不知道楼主需要跟新的到底是那些数据
--以上是跟新本条记录的
--ps:1/144才是10分钟


谢谢,需要更新的是:比如新插入的一条数据,只有stationid,obstime,inserttime和rainfall,需要在插入的同时累加前十分钟的rainfall的量插入rainfallm10。是我没表达清楚么?
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:11:51
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6820/
本文WWW.DOC100.NET DOC100.NET版权所有。