我正在做这样的插入:
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会以这种方式运行以及什么是一个好的解决方法?
答案 0 :(得分:2)
我不知道为什么sysdate表现得那样,但解决方法是
DECLARE @now datetime
SELECT @now = SYSDATE
INSERT INTO TABLE
(
ID,
SOURCE_ID,
DATE_FIELD
)
SELECT
ID,
*,
@now
FROM
(
AN SQL QUERY
);
答案 1 :(得分:1)
至少根据6.1文档,每个日期/时间函数应该为给定的事务提供相同的时间戳。因此,如果您得到不同的结果,我会假设从派生表中提取数据一次只发生一次。
尝试将sysdate放入派生表中,看看是否能解决您的问题。
答案 2 :(得分:1)
这并不能解释为什么SYSDATE没有返回你期望的内容(实际上,根据文档它应该是稳定的),但也许你可以使用NOW()代替?
SYSDATE将始终在一个语句中返回相同的值,NOW()将始终在事务内返回相同的值。也许在后台INSERT .. SELECT被分成多个语句(这会让我感到惊讶,但这符合你看到的行为)。