我的oracle数据库中有一个表是实时的往里插入数据的,大约1秒钟有5--10条。(此表只保留一天的数据,当天凌晨会清空)
我做了个程序,定时从该表中查询最新的插入的数据,3秒查询一次,将最新插入的数据取出来,如何写这个SQL语句?1.我的表里没有可以判断是最新的列,所以没有办法根据列来查询,而且我也不可能改动表结构。
2.如果查询系统时间3秒内的数据也不太显示,我的程序发布和数据库不在一台服务器,加上运算时间,加上两个服务器之间有点时间差,有可能有部分数据遗漏,查询不出来。我想法是这样的,每次查询出最新的数据,以最后一个最新的数据为下次查询的参照,当下次查询的时候时,根据上次最新的查询,有没有办法,或是oracle有没有记录什么的?希望得到最节省资源的SQL语句,谢谢了。
我做了个程序,定时从该表中查询最新的插入的数据,3秒查询一次,将最新插入的数据取出来,如何写这个SQL语句?1.我的表里没有可以判断是最新的列,所以没有办法根据列来查询,而且我也不可能改动表结构。
2.如果查询系统时间3秒内的数据也不太显示,我的程序发布和数据库不在一台服务器,加上运算时间,加上两个服务器之间有点时间差,有可能有部分数据遗漏,查询不出来。我想法是这样的,每次查询出最新的数据,以最后一个最新的数据为下次查询的参照,当下次查询的时候时,根据上次最新的查询,有没有办法,或是oracle有没有记录什么的?希望得到最节省资源的SQL语句,谢谢了。
我纯属YY,不知道结果的说
有ID,但是不可用,我有几十个前段,ID是根据前段的系统时间再加上其他一些配置制定的,各个前段时间没法做到同步,所以ID不可用
不可以的,rownum是根据ID排序的吧,我的ID是根据前段设备的时间,不是自动增长的,有可能下一秒来的数据,还不如上一秒来的时间晚呢,谢谢你的回答
另外ORACLE好像还有个审计功能,但是非常耗效率
select * from (select * from yourtab order by deftime desc) where rownum = 1;
既然你能把上次的当做参考,那是说有某个东西是能区分出来的,是用大小区分还是别的办法?只要能区分那应该是可以把这个条件加到 where 里面去吧?
若原表为tabName_A,则建立一个同结构的表tabName_B,为表tabName_A建立一个触发器,将新记录插入到表tabName_B,如:
create or replace trigger tr_tabName_A
after insert on tabName_A
for each row
begin
insert into tabName_B
(ID,
operator)
Values
(:new.ID,
:new.Operator);
end tr_tabName_A;每次查询表tabName_B的记录,处理后将表tabName_B相应记录删除,这样tabName_B总保持后插入的记录
将Insert到该表的记录都转移到你要的表里.