oracle – 将bind变量与LIKE%运算符一起使用
在我的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. (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |