поведение Oracle sysdate и systimestamp при использовании dblinks
Я столкнулся с ситуацией, которой не могу найти возможного объяснения.
Когда я запускаю следующий оператор
select 'local' src, sysdate, systimestamp from dual;
Я получаю ожидаемый результат
SRC SYSDATE SYSTIMESTAMP
----- ------------------- ------------------------------------
local 2022-02-28 15:03:07 2022-02-28 15:03:07,844496000 +03:00
Однако, если я добавлю dblink, возникнет несоответствие:
select 'dblink' src, sysdate, systimestamp from dual@db;
возвращается
SRC SYSDATE SYSTIMESTAMP
------ ------------------- ------------------------------------
dblink 2022-02-28 15:04:36 2022-02-28 15:05:21,311410000 +03:00
Если я запускаю оба оператора вместе
select 'local' src, sysdate, systimestamp from dual
union
select 'dblink' src, sysdate, systimestamp from dual@db;
результат снова правильный:
SRC SYSDATE SYSTIMESTAMP
------ ------------------- ------------------------------------
dblink 2022-02-28 15:06:07 2022-02-28 15:06:07,092513000 +03:00
local 2022-02-28 15:06:07 2022-02-28 15:06:07,092513000 +03:00
Я думаю, что это может произойти, потому что sysdate и systimestamp оцениваются только один раз в последнем выражении.
Но почему второй оператор возвращает разные результаты для двух функций?