今天在使用Oracle游标时,遇到了一个莫名的问题:使用游标中的SQL直接执行,结果是正确的;但在PLSQL中执行游标时,结果范围总是比实际的大很多。
游标定义如下:
--大写内容为外部传入的参数
cursor cur_view_of_lcl is
select count(1)
from view_price_lcl_exp_qt v
where v.owner = OWNER
and v.cd_pol = CD_POL
and v.cd_trans_port = CD_TRANSPORT
and v.dt_valid_begin between DT_VALID_BEGIN and DT_VALID_END;这时的实际结果应该是3,但在游标中结果是10.
Google无果后,考虑应该是某个查询条件没有起作用。
按照经验,常用字符类型应该没有问题,日期类型可能会有问题。
首先把最后一个条件注释掉,果然结果是10. 猜想可能是这样使用游标的方式有问题,后面有时间再仔细调查。
现在用另外一种方式,把日期参数作为游标的参数传入。如下:
cursor cur_view_of_lcl(validBegin date, validEnd date) is
select *
from view_price_lcl_exp_qt v
where v.owner = OWNER
and v.cd_pol = CD_POL
and v.cd_trans_hub = CD_TRANSPORT
and v.dt_valid_begin between validBegin and validEnd;一切OK。
探讨了在使用Oracle游标时遇到的问题,通过对比不同游标使用方式,发现日期参数处理导致结果范围异常,最终通过将日期参数作为游标参数传入解决了问题。
1698

被折叠的 条评论
为什么被折叠?



