为时间戳字段插入 SYSTIMESTAMP

Insert SYSTIMESTAMP for Timestamp field

我的 SQL Table.

中有三个时间戳
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()。

I usually get errors such as Error report - SQL Error: ORA-00904: "NOW": invalid identifier 00904. 00000 - "%s: invalid identifier"

您应该可以使用 current_timestamp:

create table t (x   TIMESTAMP(6));

insert into t (x) values (current_timestamp);

当然,systimestamp应该也可以。

Here 是一个 db<>fiddle.

在 Oracle 中你会

insert into my_table(timestamp_column) values (systimestamp);

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

(实际上,systimestamp 的一些实验表明它 可以 接受一个参数 - 一个正整数,它显示你想要多少秒的小数位!在任何case,你不能用空括号。)

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

不过要注意时区。 systimestamp returns 时间戳 带时区 。通过将其插入 timestamp 列,您将丢失信息。这适合您的业务应用程序吗?

由于您已经有一个数据默认值,只有以下面的格式插入数据时,才必须使用当前 TIMESTAMP.

填充 CREATED_TIMSTM
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 演示。