2013-04-11 51 views
1

我做這樣的插入:SQL插入不同的SYSDATE值

INSERT INTO TABLE 
(
ID, 
SOURCE_ID, 
DATE_FIELD 
) 
SELECT 
ID, 
*, 
SYSDATE 
FROM 
(
AN SQL QUERY 
); 

當我獨自運行SELECT部分​​,我得到這樣的價值觀:

1, 1234, 11.04.2013 15:00:00 
1, 1235, 11.04.2013 15:00:00 
1, 1236, 11.04.2013 15:00:00 
1, 1237, 11.04.2013 15:00:00 
1, 1238, 11.04.2013 15:00:00 

這是exaclty什麼我想插入。

但在運行整個插入我得到這樣的值後:

1, 1234, 11.04.2013 15:00:01 
1, 1235, 11.04.2013 15:00:02 
1, 1236, 11.04.2013 15:00:03 
1, 1237, 11.04.2013 15:00:04 
1, 1238, 11.04.2013 15:00:05 

有誰知道爲什麼SYSDATE行爲是這樣,什麼什麼會是一個很好的解決方法嗎?

回答

2

我不知道爲什麼SYSDATE的行爲一樣,但有解決方法至少會根據6.1的文檔是

DECLARE @now datetime 
SELECT @now = SYSDATE 

INSERT INTO TABLE 
(
ID, 
SOURCE_ID, 
DATE_FIELD 
) 
SELECT 
ID, 
*, 
@now 
FROM 
(
AN SQL QUERY 
); 
+0

對不起,忘了提及我正在使用vertica,他們沒有很好的變量支持 – andrepaal 2013-04-11 08:51:10

1

,每個日期/時間函數應該給給定事務相同的時間戳。所以,如果你得到不同的結果,我會假設從派生表中拉出數據是一次發生的。

嘗試將sysdate放入派生表中,看看是否解決了您的問題。

1

這並不能解釋爲什麼SYSDATE沒有返回你所期望的(事實上,它應該是穩定的,根據文檔),但也許你可以使用NOW()來代替?

SYSDATE將始終返回一個語句內的相同值,NOW()將始終返回事務內的相同值。也許在後臺INSERT .. SELECT被分成多個語句(這會讓我感到驚訝,但這符合你所看到的行爲)。