Oracle 中表行的创建日期时间是多少?
Posted
技术标签:
【中文标题】Oracle 中表行的创建日期时间是多少?【英文标题】:What's the created Date-time for Table row in Oracle? 【发布时间】:2011-09-28 03:10:40 【问题描述】:昨天我的朋友 -BI 专家 - 向我解释了一个预言机问题: 有一个包含大量数据的 oracle 数据库,但它们不会为每个存储每行创建的日期时间的表创建列。 那么在这种情况下 他如何获得每一行的 Created datetime (timestamp) ?
【问题讨论】:
您的意思是在现有数据库中包含大量现有数据吗?是否启用了任何类型的审核? 【参考方案1】:每一行都有自己的系统更改编号 (SCN)。这准确地识别了数据库中的一个时刻。
首先找出 SCN 并基于它使用 SCN_TO_TIMESTAMP 来获取时间戳:
SELECT
SCN_TO_TIMESTAMP(ora_rowscn),
MyTable.*
FROM
MyTable
【讨论】:
另外值得注意的是,SCN_TO_TIMESTAMP()
可能不适用于旧数据(但是,ORA_ROWSCN
始终可用)。
另请注意,默认情况下ora_rowscn
记录在块级别(NOROWDEPENDENCIES 是默认的 CREATE TABLE 选项)。参见例如asktom.oracle.com/pls/apex/…
另外这个伪列只会存储“最后更新时间”,而不是“创建时间”
您可能会收到错误消息:supplied scn was beyond the bounds of a valid scn
。可能是数据太多或者没有scn的旧记录造成的?无论如何,尝试在单行上运行它 - 最新的。
这个答案对我有用。但是,我建议更改为:SELECT SCN_TO_TIMESTAMP(ora_rowscn), MyTable.* FROM MyTable
,以便我们知道时间戳属于哪些行。以上是关于Oracle 中表行的创建日期时间是多少?的主要内容,如果未能解决你的问题,请参考以下文章
oracle能单独存一个不带时间的日期么?或者是不带日期的时间
sql 从字符串..with毫秒的Oracle日期时间戳格式化。该示例还使用listagg在oracle中具有行的聚合