oracle 游标使用根据工龄更新年假

create or replace procedure UPDATE_CMCC_WORK_AGE is
  --ID
  workageID   CMCC_WORK_AGE.Work_Age_Id%type;
  --工龄
  workageYear CMCC_WORK_AGE.Work_Age%type;
  --是否劳模
  isModelWorker Cmcc_Work_Age.Is_Model_Worker%type;
  --定义游标(简单的说就是一个可以遍历的结果集)
  cursor v_workage is
    select WORK_AGE_ID, WORK_AGE,Is_Model_Worker
      from CMCC_WORK_AGE;
    -- where CMCC_WORK_AGE.WORK_AGE != '0';
begin
  --遍历游标处理后更新到表。遍历游标有几种方法,用loop语句是其中比较直观的一种。
  --每年年初凌晨执行,工龄加1
  update CMCC_WORK_AGE  set work_age = work_age + 1;
  commit;
  open v_workage;
  LOOP
    fetch v_workage
      into workageID, workageYear,isModelWorker;
    exit when v_workage%notfound;
    --Dbms_Output.put_line('工龄:' || workageID);


    --工龄少于5年非劳模
    if (workageYear < 5 and isModelWorker=0) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '5'
       where Work_Age_Id = workageID;
       commit;
     --工龄少于5年劳模
    elsif (workageYear < 5 and isModelWorker=1) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '10'
       where Work_Age_Id = workageID;
       commit;
    elsif (workageYear >= 5 and workageYear < 10 and isModelWorker=0) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '10'
       where Work_Age_Id = workageID;
       commit;
    elsif (workageYear >= 5 and workageYear < 10 and isModelWorker=1) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '15'
       where Work_Age_Id = workageID;
       commit;
    elsif (workageYear >= 10 and workageYear < 15 and isModelWorker=0) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '12'
       where Work_Age_Id = workageID;
       commit;
        elsif (workageYear >= 10 and workageYear < 15 and isModelWorker=1) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '17'
       where Work_Age_Id = workageID;
       commit;
    elsif (workageYear >= 15 and workageYear < 20 and isModelWorker=0) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '15'
       where Work_Age_Id = workageID;
       commit;
     elsif (workageYear >= 15 and workageYear < 20 and isModelWorker=1) then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '20'
       where Work_Age_Id = workageID;
       commit;
    elsif (workageYear >= 20  and isModelWorker=0)  then
      update CMCC_WORK_AGE
         set HOLIDAY_NUM = '20'
       where Work_Age_Id = workageID;
       commit;
     else
       update CMCC_WORK_AGE
         set HOLIDAY_NUM = '25'
       where Work_Age_Id = workageID;
       commit;
    end if;


  end loop;
  close v_workage;
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值