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

探讨了在使用Oracle游标时遇到的问题,通过对比不同游标使用方式,发现日期参数处理导致结果范围异常,最终通过将日期参数作为游标参数传入解决了问题。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jession-Ji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值