我需要用oracle的存储过程每天将表1(举个列子,实际上很多数据)的请假数据更新到表2,我先把表1的数据写进游标,然后循环更新,一个员工可能存在当天请一种事假却扣三种类型假,这样我需要把请假类似加起来,也就是180分钟,我就这样写:"update 表2 set 表2.事假=nvl(表2.事假,0)+表1.请假时长 where 表2.id=表1.id and 表1.日期=表2.日期",因为公司请假可能存在提前请或者后请,所以需要把开始时间=本月的数据拿来更新,这样的话表1的数据就会重复拿来更新,我要是上面那样写SQL的话,重复更新请假时长就错了,请问我应该怎么写呢
表1:
不应该采取这种更新加的方式,而是应该直接根据当前数据把这些值统计出来,因为光根据时间是无法判断数据是否为新增
select 员工id,请假类型,
sum(case when 扣假类型='扣调休' then 请假时长 else 0 end ) 扣调休,
sum(case when 扣假类型='扣年假' then 请假时长 else 0 end ) 扣年假,
sum(case when 扣假类型='扣事假' then 请假时长 else 0 end ) 扣事假
...
from 表1 where last_day(开始时间)=last_day(sysdate)
group by 员工id,请假类型
这样你就可以直接拿这个数据更新,甚至可以直接用这个数据出报表了
你应该写个服务程序,丢服务器上定时执行,而不是用什么鬼存储过程
这东西高级语言一个循环,几个判断就完事的,用sql语句就得累死