Tij*_*ijs 4 oracle plsql bind-variables sql-like
在我的 PL/SQL 中有这个使用绑定变量的大动态 SQL。我使用 DBMS_SQL 包来绑定和执行生成的查询。
根据某些标准,将 where 子句添加到动态 SQL 中。当我只使用“in”或“=”来匹配我的绑定变量时,一切正常,结果返回速度非常快。
例子:
(servedparty = :bv_ or servedpartyimsi = :bv_)
但是,当我执行以下操作时:
(servedpartyimei like :bv_)
Run Code Online (Sandbox Code Playgroud)
并提供一个像 12345679890% 这样的值,查询需要非常非常长的时间。
我也试过这样的事情
(servedpartyimei like :bv_||'%')
然后提供没有 '%' 的值,但它给出了相同的结果
当我在没有绑定变量的情况下执行查询但只放置硬编码值时,结果也会立即返回。
我在这里做错了吗?不要像 LIKE 运算符那样绑定变量?有任何想法吗?
谢谢你。
我认为您正在遭受 Oracle 错误 9197434(使用 DBMS_SQL 时不会发生 BIND PEEKING)
据我所知,这还没有解决。
如果没有绑定变量窥视的好处,Oracle 不知道LIKE条件右侧的值是什么。例如,它可能只是“%”。因此,Oracle 假设有多少行将是LIKE典型的绑定变量值。这些假设非常保守,可能会迫使 Oracle 从您想要的快速计划(可能使用索引)转向您获得的慢速计划(可能使用散列连接)。
EXECUTE IMMEDIATE如果可能,我建议您使用 Native Dynamic SQL(即),因为它不会受到此错误的影响。否则,您可能需要提示您的 SQL。
| 归档时间: |
|
| 查看次数: |
2881 次 |
| 最近记录: |