我有一种情况,我需要使我的标量函数确定性,以便它在每次在同一查询中使用时不会执行。 我读到并了解到我们需要同时使用
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函数或对其用法/功能有错误的想法时是否存在错误?
答案 0 :(得分:4)
查询优化器最终决定它是否可以“优化”对确定性UDF的调用。但是,在你的情况下并不重要,因为你的函数确实不确定性, 有外部行动。
答案 1 :(得分:0)
除了其他人对DETERMINISTIC
和NO EXTERNAL ACTION
所说的内容之外。也许您可以通过嵌套函数调用来解决问题吗?
select x, x
from (
select my_udf('admin1,admin2') as x
from sysibm.sysdummy1
)