Oracle查找最后一行插入

时间:2013-06-26 11:36:32

标签: oracle

假设我有表我的表有值(它们是varchar):

  


  一个
  Ø
  摹
  吨

我已插入一个名为V
的新值

  


   V
  一个
  Ø
  摹
  吨

是否有一种方法或查询可以指定列中插入的最后一个值是什么?
所需的查询:select * from dual其中rown_num = count(*) - 只是一个例子
,结果将是V

1 个答案:

答案 0 :(得分:5)

表中的行没有固有的顺序。 rownum是一个伪列,它是select的一部分,因此在这里没用。无法确定存储中物理放置新行的位置,因此您不能依赖rowid

可靠地执行此操作的唯一方法是使用时间戳列(可能由触发器设置,因此您不必担心它)。这样您就可以按时间戳对行进行排序,并找到具有最高(最近)时间戳的行。

您仍然受到时间戳精度的限制,因为我发现创建了SQL Fiddle demo;在没有强制插入之间的小间隙的情况下,时间戳都是相同的,但是它似乎只支持`timestamp(3)。这可能不会是现实世界中的一个重要问题,除非你正在进行批量插入,但是插入的最后一行仍然是一个随意的概念。


正如在评论中非常正确地指出的那样,如果不需要知道实际时间,则由序列填充的数字字段将更可靠且更高效;另一个SQL Fiddle demo here,这就是要点:

create table t42(data varchar2(10), id number);

create sequence seq_t42;

create trigger bi_t42
before insert on t42
for each row
begin
  :new.id := seq_t42.nextval;
end;
/

insert into t42(data) values ('a');
insert into t42(data) values ('o');
insert into t42(data) values ('g');
insert into t42(data) values ('t');

insert into t42(data) values ('V');

select data from (
  select data, row_number() over (order by id desc) as rn
  from t42
)
where rn = 1;