gpt4 book ai didi

oracle - 将绑定(bind)变量与 LIKE % 运算符一起使用

转载 作者:行者123 更新时间:2023-12-04 23:40:00 24 4
gpt4 key购买 nike

在我的 PL/SQL 中有这个使用绑定(bind)变量的大动态 SQL。我使用 DBMS_SQL 包来绑定(bind)和执行生成的查询。

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

例子:
(servedparty = :bv_ or servedpartyimsi = :bv_)
但是,当我执行以下操作时:

(servedpartyimei like :bv_)

并提供像 12345679890% 这样的值,查询需要非常非常长的时间。

我也试过这样的东西
(servedpartyimei like :bv_||'%')
然后提供不带“%”的值,但结果相同

当我在没有绑定(bind)变量的情况下执行查询但只输入硬编码值时,结果也会立即返回。

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

谢谢你。

最佳答案

我认为您遇到了 Oracle 错误 9197434(使用 DBMS_SQL 时不会发生 BIND PEEKING)

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

如果没有绑定(bind)变量窥视的好处,Oracle 不知道 LIKE 右侧的值是什么。健康)状况。例如,它可能只是“%”。因此,Oracle 假设 LIKE 将有多少行。一个典型的绑定(bind)变量值。这些假设非常保守,可能会迫使 Oracle 从您想要的快速计划(可能使用索引)转向您获得的慢速计划(可能使用散列连接)。

如果可能,我建议您使用 Native Dynamic SQL(即 EXECUTE IMMEDIATE ),因为它不会受到此错误的影响。否则,您可能需要提示您的 SQL。

关于oracle - 将绑定(bind)变量与 LIKE % 运算符一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40660692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com