2013-06-19 71 views
2

如果運行該查詢,並將結果取3分鐘,以生成.........sysdate,單個或多個值?

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

將爲MyStamp的值是一個單一的值,或180(60秒×3分鐘)?

我測試過它,它看起來像一個單一的值。

但我試圖找出是否有一些我不能依賴的snap-fu。

我查了一下資料:

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

,並沒有說什麼在那裏。

+0

1.你不需要'(sysdate)'周圍的括號,並且2.如果需要很長時間才能運行,請嘗試查看「計劃」,我也只需運行'select * from EMP'並查看是否需要很長時間也運行。 – alfasin

+0

我並不擔心表演。我關心這個值是否是靜態的。但感謝您的意見。 – granadaCoder

回答

4

SYSDATE返回的值在單個語句中是不變的。 David在他的回答中解釋了一些微妙之處。

很明顯,如果文檔明確說明了這一點會更好。

+0

NEXTVAL在一個陳述中是否是一個常數?例如,http://www.sqlfiddle.com/#!4/4b98d/1 – Ben

+0

NEXTVAL/CURRVAL在單行內保持不變。如果select返回多於一行,則NEXTVAL/CURRVAL將針對每一行進行更改。 –

+0

@Ben - 你說得很對。我的意思是傑弗裏說的。 http://www.sqlfiddle.com/#!4/ed466/2事後看來,提及序列遮蔽而不是照亮,所以我已將其刪除。 – APC

3

只是爲了增加APC的正確答案,值得注意的一個怪癖是,在作爲另一個SQL語句的一部分的函數調用中執行的SQL獲得了一個新的一致點,包括sysdate的一致點,因此函數調用中的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;