使用动态游标的原因在于有时候传进游标的值可能是in里面的多个值,而游标变量(如varchar类型)将这些值当做一个值来处理,这样就获取不到所需要的游标数据,这时候就需要动态游标
1.动态游标也属于游标的范畴,在变量定义的时候首先定义游标类型:
TYPE My_CurType IS REF CURSOR;
CUR_1 My_CurType; --指示CUR_1的类型为My_CurType,而My_CurType是游标类型
2.在需要使用的时候拼接sql执行游标:
strSql1 := '
select lotinv.fdepotid,lotinv.fgoodsid,sum(lotinv.finprice*lotinv.fbaseqty)/sum(lotinv.fbaseqty),
sum(lotinv.finprice*lotinv.fbaseqty)/(sum(lotinv.fbaseqty)*(1+lotinv.fintaxrate))
from t_Rt_lotinventory lotinv
where lotinv.fid in(' || v_forupdatre_lotids || ') --
group by
lotinv.fintaxrate,
lotinv.fdepotid,
lotinv.fgoodsid ';
3.打开动态游标,动态游标的使用和一般游标是一样的
OPEN CUR_1 FOR strSql1; --打开动态游标