0

我的 SQL 表中有三个时间戳。

Column Name     Data Type   Nullable Data_Default

STATUS_TIMSTM   TIMESTAMP(6)    No  (null)
CREATED_TIMSTM  TIMESTAMP(6)    No  SYSTIMESTAMP  
UPDATED_TIMSTM  TIMESTAMP(6)    No  (null)
INSERT INTO "TABLE_NAME" ("STATUS_TIMSTM","CREATED_TIMSTM","UPDATED_TIMSTM")
VALUES(TIMESTAMP '2020-12-10 00:00:00', TIMESTAMP '2020-06-15 00:00:00',TIMESTAMP '2020-06-15 00:00:00');

以上工作正常。

如何插入电流systimestamp

我尝试了几个选项:curdate()、now()、systimestamp()。

我通常会收到诸如错误报告之类的错误 - SQL 错误:ORA-00904: "NOW": invalid identifier 00904. 00000 - "%s: invalid identifier"

4

3 回答 3

1

您应该能够使用current_timestamp

create table t (x   TIMESTAMP(6));

insert into t (x) values (current_timestamp);

当然,systimestamp也应该工作。

是一个 db<>fiddle。

于 2021-01-19T21:18:36.193 回答
0

在甲骨文你会

insert into my_table(timestamp_column) values (systimestamp);

请注意,函数调用不包括函数名称后的括号。Oracle 在这方面很奇怪。不带参数但您自己定义的函数必须使用空括号,但 Oracle 提供的类似函数(无参数)必须不带括号使用。只有甲骨文知道为什么这样不一致。这解释了为什么您的尝试失败了。

(实际上,一些实验systimestamp表明它可以接受一个参数 - 一个正整数,它显示您想要几秒钟的小数位!无论如何,您不能将它与空括号一起使用。)

还有其他“当前”时间戳功能,但它们做不同的事情。systimestamp返回托管数据库服务器的计算机系统的时间戳。(请注意,这可能并且通常与数据库时间戳不同。)无论如何,systimestamp这是迄今为止最常用的;类似于sysdate日期。

不过要注意时区。返回带时区systimestamp的时间戳。通过将其插入列中,您将丢失信息。这对您的业务应用程序来说可以吗?timestamp

于 2021-01-19T22:18:39.720 回答
0

由于您已经有一个 DATA DEFAULT,因此只有以以下格式插入数据必须CREATED_TIMSTM用 current 填充列TIMESTAMP

INSERT INTO "TABLE_NAME" ("STATUS_TIMSTM","UPDATED_TIMSTM")
VALUES(TIMESTAMP '2020-12-10 00:00:00', TIMESTAMP '2020-06-15 00:00:00');

这是一个简化的DB fiddle演示相同的内容。

于 2021-01-19T23:57:48.770 回答