oracle中declare程序块用法

declare
  p_curmoneySum  number(18, 4);
  p_placepointid number(10);
  p_rsaid      number(10);
  p_goodsqtysum  number(18, 6);
  p_realmoneysum number(18, 4);

  cursor p_goods_sale_c IS
    select placepointid,
         rsaid,
         sum(goodsqty) as goodsqtysum,
         sum(realmoney) as realmoneysum
      from GRESA_SA_DETAIL_V
     where rsaid not in (select rsaid from ZX_RSAID_ALAN_TEMP)
      and sellDate between to_date('2019-01-01', 'yyyy-mm-dd') and
         to_date('2019-12-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
     group by placepointid, rsaid
     order by realmoneysum asc;

begin
  p_curmoneySum := 300000.0;
  open p_goods_sale_c;
  fetch p_goods_sale_c
    into p_placepointid, p_rsaid, p_goodsqtysum, p_realmoneysum;
  while p_goods_sale_c%found loop
  
    p_curmoneySum := p_curmoneySum - p_realmoneysum;
  
    if p_curmoneySum > 0 then
    
     insert into ZX_REDUCE_RSAID_TEMP (rsaid) values (p_rsaid);
    
    else
    
     exit;
    
    end if;
  
    fetch p_goods_sale_c
      into p_placepointid, p_rsaid, p_goodsqtysum, p_realmoneysum;
  
  end loop;

  close p_goods_sale_c;
end;

发表评论