Oracle游标中直接使用日期变量的问题解决

来源:互联网 发布:国产pdf编辑软件 编辑:程序博客网 时间:2024/06/05 14:57

今天在使用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。