У меня возникла ситуация, когда мне нужно настроить функцию «Мое скалярное определение» так, чтобы она не выполнялась каждый раз при использовании в одном запросе. я прочитал и узнал, что нам нужно, чтобы использовать какДетерминированные функции в DB2
DETERMINISTIC
, а также
NO EXTERNAL ACTION
сделать детерминированную функцию работать так, чтобы он не выполняется каждый раз в запросе. Если я не ошибаюсь? также, что область детерминированного поведения представляет собой единый запрос.
Подпись Мой 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
Но я вижу, что призыв к моему сервлета каждый раз, и, следовательно, функции выполняются каждый раз.
Мне нужно знать, есть ли что-то не так, что я делаю в отношении реализации функций DETERMINISTIC или неправильного представления об их использовании/функциональности?
Точно. 'DETERMINISTIC' сообщает механизму запроса, что ему не нужно каждый раз вызывать функцию. Но это не гарантирует, что это не будет. Вы должны включить код внутри своего UDF для кэширования ввода и вывода и решить для себя, если вам нужно переделать HTTP-вызов сервлетов. – Charles