设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 百科 > 正文

oracle – 将bind变量与LIKE%运算符一起使用

发布时间:2021-01-28 20:44 所属栏目:128 来源:网络整理
导读:在我的PL / SQL中有这个使用绑定变量的大型动态SQL.我使用DBMS_SQL包来绑定并执行生成的查询. 根据某些条件,where子句被添加到动态SQL中.当我只使用“in”或“=”来匹配我的绑定变量时,一切正常,结果返回得非常快. 例: (servedparty =:bv_或servedpartyims

在我的PL / SQL中有这个使用绑定变量的大型动态SQL.我使用DBMS_SQL包来绑定并执行生成的查询.

根据某些条件,where子句被添加到动态SQL中.当我只使用“in”或“=”来匹配我的绑定变量时,一切正常,结果返回得非常快.

例:

(servedparty =:bv_或servedpartyimsi =:bv_)

但是,当我执行以下操作时:

(servedpartyimei like :bv_)

并提供类似12345679890%的值,查询需要非常长的时间.

我也尝试过像这样的东西

(servepartyimei喜欢:bv_ ||’%’)

然后提供没有’%’的值,但它给出相同的结果

当我执行没有绑定变量的查询但只是放入硬编码值时,结果也立即返回.

我在这里做错了吗?不要像LIKE运算符那样绑定变量吗?
有任何想法吗?

谢谢.

解决方法

我认为您正在遭受Oracle错误9197434(使用DBMS_SQL时没有发生的绑定PEEKING)

据我所知,这还没有解决.

没有绑定变量偷看的好处,Oracle不知道LIKE条件右侧的值是什么.例如,它可能只是’%’.因此,Oracle假设有多少行将像典型的绑定变量值一样.这些假设非常保守,很可能迫使Oracle远离您想要的快速计划(可能使用索引)来实现您正在获得的缓慢计划(可能使用散列连接).

如果可能的话,我建议你使用Native Dynamic SQL(即EXECUTE IMMEDIATE),因为它不会受到这个bug的影响.否则,您可能需要提示您的SQL.

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读