是否存在类似于DETERMINISTIC的PL/SQL编译指示,但是对于单个SQL SELECT的范围?

Luk*_*der 10 oracle optimization plsql deterministic stored-functions

在SQL SELECT语句中,我想执行一个对该SELECT语句范围具有确定性的函数(或者事务也可以):

select t.x, t.y, my_function(t.x) from t
Run Code Online (Sandbox Code Playgroud)

许多值t.x都是相同的,因此Oracle可以省略一次又一次地调用相同的函数,以加快速度.但是如果我将函数标记为DETERMINISTIC,则可以在此查询的多次执行之间缓存结果.我无法使用的原因DETERMINISTIC是因为my_function使用了不时更改的配置参数.

我可以使用其他任何关键字吗?是否有任何我应该注意的问题(内存问题,并发性等)?或者也许任何其他技巧,例如分析函数,每个t.x值只调用一次函数(没有重大的性能影响)?

Ton*_*ews 11

如果你这样做:

select t.x, t.y, (select my_function(t.x) from dual)
from t
Run Code Online (Sandbox Code Playgroud)

然后Oracle可以使用子查询缓存来实现减少的函数调用.

  • 很好的答案,但我觉得实际上有点令人不安.看似纯粹的语法变化的东西可以改变查询的结果(假设函数是非确定性的). (3认同)