我遇到了一种情况,我找不到可能的解释。
当我运行以下语句时
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 在最后一个语句中只评估一次。
但是为什么第二条语句为两个函数返回不同的结果呢?