设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: 专业 娱乐 服务 百度
当前位置: 首页 > 站长百科 > 正文

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

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

在我的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.

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读