我们如何知道表格中第一个插入的记录,让我们考虑我们已经将100万条记录加载到一个表格中,而我们在这里没有任何时间戳记列。 如何找到它?
答案 0 :(得分:2)
如果没有列表示插入顺序,如时间戳,串行字段(例如:主键),则无法找到第一个插入行的内容。 SQL标准清楚地说明数据集没有排序(没有"自然"顺序)。在重新索引数据库,重新加载数据库和类似操作之后,无法保证rownum,row id等所有hacks都能正常工作。
答案 1 :(得分:1)
不是100%准确(正如 piotrpo 指出的那样),但如果您对ORA_ROWSCN
(docs)提供的值的准确性感到满意,您可以找到首先插入哪一行(当然,如果以后没有更新)。要正确,甚至不是行,而是行所在的块 - 您可以使用DBMS_ROWID
函数深入到行级别(再次,不是100%精确):
SELECT DBMS_ROWID.ROWID_ROW_NUMBER(ROWID),
SCN_TO_TIMESTAMP(ORA_ROWSCN)
FROM table1 ORDER BY 2 DESC, 1 ASC
答案 2 :(得分:0)
如果您确定了带有ID的列,那么您无法知道哪一行是第一行,因为您不知道是否有人手动添加了ID低于休息的行,一种解决方案是添加到表字段使用时间戳/日期格式,为插入或修改的每一行插入时间。但...
SELECT
SCN_TO_TIMESTAMP(ora_rowscn),ora_rowscn
FROM
your_table
你可以找到你的行被修改/添加...可能有一些解决方案但没有rowid。有了这个,你只能找到第一个/最后一个更新的行...
答案 3 :(得分:-1)
只需使用rowid
从my_table中选择*,其中rowid为 ( 从my_table中选择min(rowid) )
它应该有用