2010年2月5日星期五

Oralce游标定义、游标变量、游标循环的实际例子


--给销售订单加上行号
--同一个单据号(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

没有评论:

发表评论