--给销售订单加上行号
--同一个单据号(djh)之内,行号(rowno)按照10的步长来编号
  --新单据号,行号要重新从10开始
declare          
  --本例子演示了Oralce游标定义、Oracle游标变量、Oracle游标循环
    --以及在游标里面更新数据库的技巧
  cursor cc is select nno,djh,rowno          
  from temp_so order by nno;         
  --定义游标变量          
    ccrec cc%rowtype;
  --定义自己的变量
  irowno number;
  idjh varchar2(50);
begin          
  --打开游标          
   open cc;         
   --提取一行数据到ccrec中             
   fetch cc into ccrec;                     
    --判断是否提取到值,没取到值就退出              
      --取到值cc%notfound 是false             
     --取不到值cc%notfound 是true
     idjh := ccrec.djh;
       irowno:=10;
   loop --loop循环
       --exit when (cc%notfound or cc%rowcount =300);  
         exit when (cc%notfound);   
    if (idjh = ccrec.djh) then
     update temp_so set temp_so.rowno = irowno where temp_so.nno = ccrec.nno;
     --dbms_output.put_line(cc%rowcount||'    '||ccrec.djh||'    '||idjh||'    '||irowno);
      else 
     irowno:=10;
     idjh := ccrec.djh;
     update temp_so set temp_so.rowno = irowno where temp_so.nno = ccrec.nno;
     -- dbms_output.put_line(cc%rowcount||'    '||ccrec.djh||'    '||idjh||'    '||irowno);
      end if;
     fetch cc into ccrec;  
     irowno:=irowno+10;
   end loop;
   close cc;
   commit;
end;
A Contre Courant
没有评论:
发表评论