1

我正在做这样的插入:

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

这正是我要插入的内容。

但是在运行整个插入后,我得到如下值:

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 会这样,什么是好的解决方法?

4

3 回答 3

2

我不知道为什么 sysdate 会这样,但解决方法是

DECLARE @now datetime
SELECT @now = SYSDATE

INSERT INTO TABLE 
(
 ID, 
 SOURCE_ID, 
 DATE_FIELD
) 
SELECT 
 ID,
 *,
 @now
FROM 
(
 AN SQL QUERY
);
于 2013-04-11T08:31:15.990 回答
1

这并不能解释为什么 SYSDATE 没有返回您所期望的(实际上,根据文档,它应该是稳定的),但也许您可以使用 NOW() 代替?

SYSDATE 将始终在一个语句中返回相同的值,NOW() 将始终在事务中返回相同的值。也许在后台 INSERT .. SELECT 被分成多个语句(这会让我感到惊讶,但这符合你看到的行为)。

于 2013-04-12T06:02:15.703 回答
1

至少根据 6.1 文档,每个日期/时间函数应为给定事务提供相同的时间戳。因此,如果您得到不同的结果,我会假设一次将数据从派生表中提取出来。

尝试将 sysdate 放入派生表中,看看是否能解决您的问题。

于 2013-04-11T17:21:53.527 回答