nachfren Asked: 2020-12-15 03:13:37 +0800 CST 2020-12-15 03:13:37 +0800 CST 2020-12-15 03:13:37 +0800 CST Oracle 11g 是否保存插入的日期? 772 我在 oracle 中有一个如下表: SELECT * FROM ESTUDIANTES; ID NOMBRE EDAD -- ------ ---- 1 Pepe 23 2 Maria 35 ... 我能以某种方式找出该表中插入的日期吗? sql 2 Answers Voted Best Answer sstan 2020-12-15T03:55:04+08:002020-12-15T03:55:04+08:00 答案是否定的。如果您想要 INSERT 日期,您必须为此目的在表定义中添加一个日期列并自己维护此信息。 在另一个答案中,建议使用特殊的伪列ORA_ROW_SCN与SCN_TO_TIMESTAMP. 这个想法很有趣,但它有两个主要问题: ORA_ROW_SCN返回一个数字,即系统更改编号(SCN),它表示记录最后一次更改的时间。换句话说,每UPDATE修改一条记录,ORA_ROW_SCN它就会发生变化,从而丢失了发生时间的信息INSERT。 即使它在插入后没有更改记录,在不确定的时间之后,尝试使用它将SCN_TO_TIMESTAMP值转换ORA_ROWSCN为日期也不起作用,并且会给你一个错误(没有找到基于指定时间的快照) . 这是因为日期信息保存在 Oracle 的 REDO 中,这是一个不断重写的文件,不会永久存储信息。 由于这两个原因,请避免使用ORA_ROWSCN+ SCN_TO_TIMESTAMP,因为即使乍一看它似乎有效,但如果您取消UPDATE记录或等待足够长的时间,您会发现它不再有效。 Flowen 2020-12-15T03:16:39+08:002020-12-15T03:16:39+08:00 使用ORA_ROWSCN SELECT ORA_ROWSCN, ID, NOMBRE, EDAD FROM ESTUDIANTES; SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN), ID, NOMBRE, EDAD FROM ESTUDIANTES;
答案是否定的。如果您想要 INSERT 日期,您必须为此目的在表定义中添加一个日期列并自己维护此信息。
在另一个答案中,建议使用特殊的伪列
ORA_ROW_SCN
与SCN_TO_TIMESTAMP
. 这个想法很有趣,但它有两个主要问题:ORA_ROW_SCN
返回一个数字,即系统更改编号(SCN),它表示记录最后一次更改的时间。换句话说,每UPDATE
修改一条记录,ORA_ROW_SCN
它就会发生变化,从而丢失了发生时间的信息INSERT
。SCN_TO_TIMESTAMP
值转换ORA_ROWSCN
为日期也不起作用,并且会给你一个错误(没有找到基于指定时间的快照) . 这是因为日期信息保存在 Oracle 的 REDO 中,这是一个不断重写的文件,不会永久存储信息。由于这两个原因,请避免使用
ORA_ROWSCN
+SCN_TO_TIMESTAMP
,因为即使乍一看它似乎有效,但如果您取消UPDATE
记录或等待足够长的时间,您会发现它不再有效。使用ORA_ROWSCN