2

如果你运行这个查询,结果需要 3 分钟才能生成......

select to_char((sysdate),'dd_mm_yyyy___HH24_MI_SS') as MyStamp , e.* from EMP e;

MyStamp 的值是单个值还是 180(60 秒 x 3 分钟)?

我已经测试过了,它看起来像一个单一的值。

但我想弄清楚是否有一些我不能依赖的snap-fu。

我检查了文档:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm

它没有说什么。

4

2 回答 2

4

SYSDATE 返回的值在单个语句中是常量。大卫在他的回答中解释了一些微妙之处。

显然,如果文档明确说明这一点会更好。

于 2013-06-19T18:59:27.237 回答
3

只是为了补充 APC 的正确答案,一个值得注意的怪癖是,在函数调用中作为另一个 SQL 语句的一部分执行的 SQL 获得了一个新的一致性点,包括 sysdate 的一致性点,因此函数调用中的 sysdate 可以不同于父查询。

因此,如果您的查询中有一个使用 sysdate 的函数调用...

select ...
from   large_table
where  some_complex_relative_time_function(large_table.datetime_of_activity) < sysdate;

...将 sysdate 的值传递给它更安全:

select ...
from   large_table
where  some_complex_relative_time_function(large_table.datetime_of_activity, sysdate) < sysdate;
于 2013-06-19T21:12:43.103 回答