我的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()。
我通常会收到诸如: ORA-00904:"NOW":无效标识符00904等错误。00000 - "%s:无效标识符“
发布于 2021-01-19 23:57:48
由于您已经具有数据默认值,所以只有以以下格式插入数据时,才必须使用当前的CREATED_TIMSTM填充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小提琴演示了相同的内容。
发布于 2021-01-19 21:18:36
您应该能够使用current_timestamp
create table t (x TIMESTAMP(6));
insert into t (x) values (current_timestamp);当然,systimestamp也应该能工作。
这里是db<>fiddle。
发布于 2021-01-19 22:18:39
在甲骨文里
insert into my_table(timestamp_column) values (systimestamp);注意,函数调用执行,而不是,在函数名之后包含括号。在这方面,Oracle是非常奇怪的;函数不接受参数,但是如果您定义了自己,那么必须使用空括号,但是Oracle 提供的类似函数(没有参数)必须不带括号地使用。只有Oracle知道为什么这样不一致。这就解释了为什么你的尝试失败了。
(实际上,对systimestamp的一些实验表明,可以使用一个参数--一个正整数,它显示了您想要的小数位数秒数!)无论如何,不能用空括号来使用它。)
还有其他的“当前”时间戳函数,但它们所做的事情不同。systimestamp返回承载数据库服务器的计算机系统的时间戳。(请注意,这可能而且经常与数据库时间戳不同。)在任何情况下,systimestamp都是其中最常用的;类似于日期的sysdate。
不过要小心时区。systimestamp返回带有时区的时间戳。通过将其插入timestamp列,您将丢失信息。你的商业申请可以吗?
https://stackoverflow.com/questions/65799458
复制相似问题