用PL/SQL计算路段桩号

create or replace procedure P_daniel as
  v_LXBM TM_DLZX_AAT.lxbm%type;
  v_FNODE TM_DLZX_AAT.fnode%type;
  v_TNODE TM_DLZX_AAT.tnode%type;
  v_RLENGTH TM_DLZX_AAT.RLENGTH%type;
  v_FMEAS TM_DLZX_AAT.FMEAS%type;
  v_TMEAS TM_DLZX_AAT.TMEAS%type;
  counts  number(3);
  cursor c_LXBM is select distinct LXBM from TM_DLZX_AAT;
  cursor c_FirstNode is select FNODE, TNODE, RLENGTH from TM_DLZX_AAT where fnode not in(select tnode from TM_DLZX_AAT where lxbm=v_lxbm) AND lxbm=v_lxbm  for update of FMEAS,TMEAS;
  cursor c_RLENGTH  is select fnode,tnode,RLENGTH from TM_DLZX_AAT where LXBM=v_lxbm and FNODE=v_TNODE  for update of FMEAS,TMEAS;
  cursor t is select count(*)-1 a from TM_DLZX_AAT where lxbm=v_LXBM;
 begin
   v_FMEAS := 0;
   v_TMEAS := 0;
   open c_LXBM;
    
   fetch c_LXBM into v_LXBM;
  while c_LXBM%FOUND loop
    
          open c_FirstNode;
        fetch c_FirstNode into v_FNODE, v_TNODE, v_RLENGTH;
          v_FMEAS := v_TMEAS;
          v_TMEAS := v_TMEAS + v_RLENGTH;
        update TM_DLZX_AAT set FMEAS=v_FMEAS, TMEAS=v_TMEAS where current of c_FirstNode;
        close c_FirstNode;
        open t;
        fetch t into counts;
        close t;
        for TT in 1..counts loop
        open c_RLENGTH;
         if c_RLENGTH%notfound then
          insert into errors values(v_LXBM);
           goto daniel;
         else
           fetch c_RLENGTH into v_FNODE,v_TNODE, v_RLENGTH;
                v_FMEAS := v_TMEAS;
                 v_TMEAS := v_TMEAS + v_RLENGTH;
               update TM_DLZX_AAT set FMEAS=v_FMEAS, TMEAS=v_TMEAS where current of c_RLENGTH;
               close c_RLENGTH;
          end if;
         end loop;
      <> 
     v_RLENGTH :=0;
     v_FMEAS := 0;
     v_TMEAS := 0;
      fetch c_LXBM into v_LXBM;
  end loop;
   -- close c_LXBM;
end P_daniel;
/*create or replace procedure P_daniel as
  v_LXBM TM_DLZX_AAT.lxbm%type;
  v_FNODE TM_DLZX_AAT.fnode%type;
  v_TNODE TM_DLZX_AAT.tnode%type;
  v_RLENGTH TM_DLZX_AAT.RLENGTH%type;
  v_FMEAS TM_DLZX_AAT.FMEAS%type;
  v_TMEAS TM_DLZX_AAT.TMEAS%type;
  cursor c_LXBM is select distinct LXBM from TM_DLZX_AAT;
  cursor c_FirstNode is select FNODE, TNODE, RLENGTH from TM_DLZX_AAT where fnode not in(select tnode from TM_DLZX_AAT where lxbm=v_lxbm) AND lxbm=v_lxbm  for update of FMEAS,TMEAS;
  cursor c_RLENGTH  is select tnode,RLENGTH from TM_DLZX_AAT where LXBM=v_lxbm and FNODE=v_TNODE  for update of FMEAS,TMEAS;
 begin
   v_FMEAS := 0;
   v_TMEAS := 0;
  for T_LXBM in c_LXBM loop
     fetch c_LXBM into v_LXBM;
          open c_FirstNode;
         fetch c_FirstNode into v_FNODE, v_TNODE, v_RLENGTH;
             v_FMEAS := v_TMEAS;
             v_TMEAS := v_TMEAS + v_RLENGTH;
         update TM_DLZX_AAT set FMEAS=v_FMEAS, TMEAS=v_TMEAS where current of c_FirstNode;
        close c_FirstNode;
       
        for T_RLENGTH in c_RLENGTH loop
            fetch c_RLENGTH into v_TNODE, v_RLENGTH;
              v_FMEAS := v_TMEAS;
                v_TMEAS := v_TMEAS + v_RLENGTH;
              update TM_DLZX_AAT set FMEAS=v_FMEAS, TMEAS=v_TMEAS where current of c_RLENGTH;
        end loop;
       /* open c_RLENGTH;
        fetch c_RLENGTH into v_TNODE, v_RLENGTH;
          while c_RLENGTH%found loop
             v_FMEAS := v_TMEAS;
              v_TMEAS := v_TMEAS + v_RLENGTH;
             update TM_DLZX_AAT set FMEAS=v_FMEAS, TMEAS=v_TMEAS where current of c_RLENGTH;
             fetch c_RLENGTH into v_TNODE, v_RLENGTH;
         end loop;*/
      /*v_RLENGTH :=0;
      v_FMEAS := 0;
      v_TMEAS := 0;
    
   -- close c_RLENGTH;
  end loop;
   -- close c_LXBM;
end P_daniel;*/

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8720638/viewspace-240046/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8720638/viewspace-240046/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值