Oracle存储过程中使用cursor

CREATE OR REPLACE PROCEDURE GLU_SP_RECALCULATE_RATE (P OUT VARCHAR2)AS

  rateRow REV_SHARE_RATE%rowtype;
  cursor rateRows is
    SELECT
        DISTRIBUTOR_ID,
        RETAILER_ID,
        RATE,
        MODIFIED_DATE ,
        GENRE
    FROM REV_SHARE_RATE
    WHERE
        IS_RUN=0;

BEGIN

  FOR rateRow in rateRows loop

      --Qualcomm,Qualcomm(p)Qualcomm(s)
      IF rateRow.Distributor_Id =1 OR rateRow.Distributor_Id =35 OR rateRow.Distributor_Id =61 THEN
          UPDATE DAILYDAP SET USD_VALUE = (NUM_DOWNLOADS * DAP_AMOUNT* rateRow.Rate)/(NET_REV/USD_VALUE),-- v_usd_fx,
                 GBP_VAlUE = (NUM_DOWNLOADS * DAP_AMOUNT* rateRow.Rate)/(NET_REV/GBP_VAlUE),--v_gbp_fx,
                 NET_REV= NUM_DOWNLOADS * DAP_AMOUNT* rateRow.Rate
          WHERE DISTRIB_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id AND NET_REV > 0 AND REPORT_DATE >= rateRow.Modified_Date;
      --ATT
      ELSIF rateRow.DISTRIBUTOR_ID = 49 THEN
         update (select /*+ BYPASS_UJVC */ d.DISTRIB_ID,d.RETAILER_ID,rate.genre,d.USD_VALUE,d.DATA_RAW,d.NET_REV,d.GBP_VAlUE,d.REPORT_DATE from dailydap d
                 inner join att_raw_daily att on d.ref_id = att.id
                 inner join rev_share_rate rate on d.distrib_id = rate.DISTRIBUTOR_ID and d.retailer_id = rate.Retailer_Id and att.product_category = rate.genre
                )
         SET
            USD_VALUE = (DATA_RAW * rateRow.Rate)/ (NET_REV/USD_VALUE),--v_usd_fx,
            GBP_VAlUE = (DATA_RAW * rateRow.Rate)/(NET_REV/GBP_VAlUE),--v_gbp_fx,
            NET_REV= DATA_RAW * rateRow.Rate
         where
             DISTRIB_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id AND
             GENRE=rateRow.GENRE AND NET_REV > 0 AND REPORT_DATE >= rateRow.Modified_Date;
      --sprint,nextel...
      ELSE
          UPDATE DAILYDAP SET USD_VALUE = (DATA_RAW * rateRow.Rate)/ (NET_REV/USD_VALUE),--v_usd_fx,
                 GBP_VAlUE = (DATA_RAW * rateRow.Rate)/(NET_REV/GBP_VAlUE),--v_gbp_fx,
                 NET_REV= DATA_RAW * rateRow.Rate
          WHERE DISTRIB_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id AND NET_REV > 0 AND REPORT_DATE >= rateRow.Modified_Date;
      END IF;

      --UPDATE REV_SHARE_RATE SET IS_RUN = 1
      UPDATE REV_SHARE_RATE SET IS_RUN=1 WHERE DISTRIBUTOR_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id;

  END LOOP;

  COMMIT;
  P:='OK';
EXCEPTION
   WHEN OTHERS THEN
   dbms_output.put_line(SQLERRM);
   ROLLBACK;
   P:= SQLERRM;
END;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值