lgqwym 2022-03-30 15:33 采纳率: 76.9%
浏览 27
已结题

请问oracle存储过程更新员工请假数据问题

我需要用oracle的存储过程每天将表1(举个列子,实际上很多数据)的请假数据更新到表2,我先把表1的数据写进游标,然后循环更新,一个员工可能存在当天请一种事假却扣三种类型假,这样我需要把请假类似加起来,也就是180分钟,我就这样写:"update 表2 set 表2.事假=nvl(表2.事假,0)+表1.请假时长 where 表2.id=表1.id and 表1.日期=表2.日期",因为公司请假可能存在提前请或者后请,所以需要把开始时间=本月的数据拿来更新,这样的话表1的数据就会重复拿来更新,我要是上面那样写SQL的话,重复更新请假时长就错了,请问我应该怎么写呢
表1:

img


表2:

img

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-30 16:13
    关注

    不应该采取这种更新加的方式,而是应该直接根据当前数据把这些值统计出来,因为光根据时间是无法判断数据是否为新增

    select 员工id,请假类型,
    sum(case when 扣假类型='扣调休' then 请假时长 else 0 end ) 扣调休,
    sum(case when 扣假类型='扣年假' then 请假时长 else 0 end ) 扣年假,
    sum(case when 扣假类型='扣事假' then 请假时长 else 0 end ) 扣事假
    ...
    from1 where last_day(开始时间)=last_day(sysdate) 
    group by 员工id,请假类型
    

    这样你就可以直接拿这个数据更新,甚至可以直接用这个数据出报表了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 修改了问题 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗