Oracle的SYSTIMESTAMP是否在单个事务中保持不变?

Oracle的SYSTIMESTAMP是否在单个事务中保持不变?,oracle,Oracle,还是每次都要进行评估 没有具体说明。或者可能是因为函数被认为是每次都执行的吗?SYSTIMESTAMP会为每个语句求值,如下代码段所示 然而,Oracle似乎说,当我在一条语句中多次使用systimestamp时,它总是会产生相同的值 在-AAA-或-BBB-中进行注释: -AAA-的结果: -BBB-的结果: SYSTIMESTAMP将为每个语句求值,如下代码段所示 然而,Oracle似乎说,当我在一条语句中多次使用systimestamp时,它总是会产生相同的值 在-AAA-或-BBB-中

还是每次都要进行评估

没有具体说明。或者可能是因为函数被认为是每次都执行的吗?

SYSTIMESTAMP会为每个语句求值,如下代码段所示

然而,Oracle似乎说,当我在一条语句中多次使用systimestamp时,它总是会产生相同的值

在-AAA-或-BBB-中进行注释:

-AAA-的结果:

-BBB-的结果:

SYSTIMESTAMP将为每个语句求值,如下代码段所示

然而,Oracle似乎说,当我在一条语句中多次使用systimestamp时,它总是会产生相同的值

在-AAA-或-BBB-中进行注释:

-AAA-的结果:

-BBB-的结果:


+1还值得注意的是,SYSTIMESTAMP和SYSDATE在单个语句中甚至不一定是常量,这取决于上下文。有关详细信息,请参见我对的回答。+1还值得注意的是,SYSTIMESTAMP和SYSDATE在单个语句中甚至不一定是常量,这取决于上下文。有关详细信息,请参阅我对的答复。
create table timestamptest (ts timestamp);

delete timestamptest;
declare now timestamp;
begin
  select systimestamp into now from dual;
  FOR i in 1..10000 LOOP
--AAA--   insert into timestamptest values (systimestamp);
--BBB--   insert into timestamptest values (now);
  END LOOP;
end;
/
select count(distinct ts) from timestamptest;
> select count(distinct ts) from timestamptest;
-------------------+
 COUNT(DISTINCTTS) |
-------------------+
                30 |
-------------------+
> select count(distinct ts) from timestamptest;
-------------------+
 COUNT(DISTINCTTS) |
-------------------+
                 1 |
-------------------+