日期:2014-05-16 浏览次数:20805 次
create or replace function FT_DEAL_TIME(iMucid number) return Time_Data_METADATA_Table PIPELINED is v_time_data_metadata Time_Data_METADATA; nowdate date; predate date; begin for x in (select f.positiontime as positiontime, e.longitude as longitude, e.latitude as latitude, f.velocity as velocity from BMPS_HIS_RECEIVE_GPSSTATUS d, BMPS_HIS_RECEIVE_GPSJPINFO e, BMPS_HIS_RECEIVE_GPSINFO f where d.sequence = f.sequence and e.sequence = f.sequence and d.status14 = 1 and d.mcuid = iMucid order by d.positiontime asc) loop nowdate := x.positiontime; predate := select max(t.positiontime) from table(FT_DEAL_TIME(iMucid)) t;; if (nowdate - predate) * 24 * 60 > 5 then v_time_data_metadata := Time_Data_METADATA(x.positiontime, x.longitude, x.latitude, x.velocity); pipe row(v_time_data_metadata); end if; end loop; return; end;
create or replace function FT_DEAL_TIME(iMucid number) return Time_Data_METADATA_Table PIPELINED is v_time_data_metadata Time_Data_METADATA; nowdate date; predate date; begin for x in (select f.positiontime as positiontime, e.longitude as longitude, e.latitude as latitude, f.velocity as velocity from BMPS_HIS_RECEIVE_GPSSTATUS d, BMPS_HIS_RECEIVE_GPSJPINFO e, BMPS_HIS_RECEIVE_GPSINFO f where d.sequence = f.sequence and e.sequence = f.sequence and d.status14 = 1 and d.mcuid = iMucid order by d.positiontime asc) loop nowdate := x.positiontime; --predate := select max(t.positiontime) from table(FT_DEAL_TIME(iMucid)) t; -- 下面的判断条件得加上第一条记录时predate is null的判断 if predate is null or (nowdate - predate) * 24 * 60 > 5 then v_time_data_metadata := Time_Data_METADATA(x.positiontime, x.longitude, x.latitude, x.velocity); pipe row(v_time_data_metadata); -- 记录前一条记录的时间 predate := nowdate(); end if; end loop; return; end;
------解决方案--------------------
跟踪维护最大值就行了.
if predate is null or predate < nowdate then
predate := nowdate;
end if;