2

我有一种情况,我需要使我的标量函数确定性,以便在同一查询中使用时不会每次都执行它。我阅读并了解到我们需要同时使用两者

确定性

没有外部行动

使 DETERMINISTIC 函数工作,以便它不会在查询中每次都执行。如果我没有错?此外,确定性行为的范围是单个查询。

My UDF 的签名如下:

create or replace FUNCTION my_udf(myLIST VARCHAR(1000)) 
RETURNS integer
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
BEGIN ATOMIC
< code for making HTTP  servlet call >
END

我正在使用以下查询来测试 my_udf() 函数:

select my_udf('admin1,admin2'),my_udf('admin1,admin2') from sysibm.sysdummy1

但是我看到每次都在调用我的 servlet,因此每次都在执行函数。

我需要知道在 DETERMINISTIC 函数的实现方面我做错了什么,或者对它们的用法/功能有错误的想法?

4

2 回答 2

4

查询优化器最终决定它是否可以“优化掉”对确定性 UDF 的调用。但是,在您的情况下,这并不重要,因为您的函数确实不是确定性的,并且确实具有外部作用。

于 2015-06-25T11:40:12.510 回答
0

除了其他人所说的DETERMINISTICNO EXTERNAL ACTION。也许你可以通过嵌套函数调用来解决这个问题?

select x, x
from (
    select my_udf('admin1,admin2') as x
    from sysibm.sysdummy1
)
于 2015-06-26T08:59:13.190 回答