поведение 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 оцениваются только один раз в последнем выражении.

Но почему второй оператор возвращает разные результаты для двух функций?

0 ответов

Другие вопросы по тегам