DB2中的确定性函数

时间:2015-06-25 04:44:52

标签: db2 deterministic udf

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

  

DETERMINISTIC

以及

  

无外部行动

使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函数或对其用法/功能有错误的想法时是否存在错误?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

除了其他人对DETERMINISTICNO EXTERNAL ACTION所说的内容之外。也许您可以通过嵌套函数调用来解决问题吗?

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