id,name,newtime
表B:
id,name,oldtime,newtime;
需求是:
表A的数据在表B中,并且在newtime的10分钟内没有数据就insert到表B,否则update表B中相对应的newtime字段。
由于表A每隔一段时间要更新一次,而这个SQL是在表A更新后就要执行的,所有我用的存储过程,
我是SQL语句是这样写的:
select count(*) into v_number form 表B
where id=v_id --用的游标来取表A的值
and name=v_name
and newtime between v_newtime - interval '10' minute and v_newtime;
if v_number=0 then
insert into 表B values(v_id,v_name,v_newtime,v_newtime);--情况一
else
update 表B set newtime=v_newtime
where id=v_id
and name=v_name
and newtime between v_newtime - interval '10' minute and v_newtime;--情况二
我发现情况二的话,效率比情况一慢一倍,因为它做了2次扫描。而且感觉第二次有点多此一举;
我想有没有办法,找到了就update。而不是像我写的先告诉这个表里有,然后我再去找个这条数据update?