为时间戳字段插入 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);
请注意,函数调用确实不在函数名称后包含括号。甲骨文在这方面很奇怪;不带参数的函数,但您定义 yourself,must 使用空括号,但类似的函数(无参数)由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 演示。
我的 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);
请注意,函数调用确实不在函数名称后包含括号。甲骨文在这方面很奇怪;不带参数的函数,但您定义 yourself,must 使用空括号,但类似的函数(无参数)由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 演示。