缓慢的 Oracle 执行

Slow Oracle execution

我在 Oracle 中有这个 where 子句条件来检查与给定值相似的名称,它 returns 结果正确,但运行速度很慢。有没有更有效的方法来执行这个条件?谢谢。

 AND 
    (P5_ORGN_NAME IS  NULL OR

(D.ORGANIZATION_NAME LIKE '' || upper(P5_ORGN_NAME) || '%' OR D.FORMATTED_ORGANIZATION_NAME like
'' || local.pkg.orgname_format(upper(P5_ORGN_NAME)) || '%')
)

创建 pkg.orgname_format 函数 DETERMINISTIC 这样 Oracle 就知道不要对每一行都重复 运行 它。

在您的 local.pkg 包裹中...

FUNCTION orgname_format (p_org_name VARCHAR2)
   RETURN VARCHAR2 DETERMINISTIC IS
BEGIN 
   ...
END;

这将告诉 Oracle 函数总是 returns 相同的输入参数值的相同值。知道这一点后,Oracle 可以执行该函数一次,而不是对查询中基础 table(s) 中的每一行都执行它。

当然,只有在函数确实是确定性的情况下才能使用它,从它的名称来看,它听起来确实如此。