【发布时间】:2019-05-23 22:53:47
【问题描述】:
我想强制 Oracle sysdate 函数为单独的语句返回不同的值,就像在 Postgres 中一样。我已经对文档、网络和 SO 本身进行了一些挖掘,但找不到解决此问题的答案。
这个文档似乎很差:see for yourself
我将 Oracle 11g 与 SQL Developer 18.3 一起使用
请阅读下面的 MVCE。
执行后:
create table t(a timestamp);
insert into t values (sysdate);
insert into t values (sysdate);
insert into t values (sysdate);
select * from t;
我明白了:
A
---------------------------
18/12/25 04:25:59,000000000
18/12/25 04:25:59,000000000
18/12/25 04:25:59,000000000
我想得到(手动更改):
A
---------------------------
18/12/25 04:25:59,1234
18/12/25 04:25:59,7281
18/12/25 04:26:00,1928
真正的问题出现在对过程的不同CALL 语句中,但上面的示例似乎为我复制了这个问题。
更新
我发现有用的一件事是在语句之间放置暂停,但这真的不是我想要的:
set pause on;
create table t(a timestamp);
insert into t values (sysdate);
pause
insert into t values (sysdate);
pause
insert into t values (sysdate);
【问题讨论】:
-
即使你能做到这一点,你确定它会完全解决你的问题吗?我的意思是,假设两个插入恰好发生在足够近的地方,以至于
SYSDATE值仍然看起来相同? -
@TimBiegeleisen 这不是多用户环境,目的只是为了我自己的培训。我正在执行不同的语句,但我没有观察到调用之间的任何差异,这对于我从其他 DBMS 的经验中学到的东西来说很奇怪。
标签: oracle11g oracle-sqldeveloper sysdate