在oracle数据库中如何查询出一个表中最后插入的一条记录?假设这个表有个MAKEDATE字段,记录插入记录的时间的,我要求的是不能根据MAKEDATE的最大值去判断[/size]

解决方案 »

  1.   

    根据内置的rowid来查
    楼主不结贴的吗?
      

  2.   

    只能是从makedate的最大值来确定。
      

  3.   


    select * from t1 where rowid=(
    select max(rowid) from t1
    )
      

  4.   

    rowid也不能判断最后一个值,如果涉及到行迁移或者一个表段涉及多个数据文件。
      

  5.   

    MAX ROWID并不代表是最后插入的数据
    特别是那些时间长的,经常做删减的表
      

  6.   

    插入到makedate字段时,取当前系统时间
      

  7.   

    select max(rowid) from table
      

  8.   

    select max(rownum) from (select a.*,rownum num from (select * from t1) a) b ;
      

  9.   

    理论上说是可以的,你需要读取redo log,重做日志中会记录你所说的insert语句。
    但绝非一句简单的sql可以完成。另外ROWNUM是不可以拿来做判断的,对此讨论颇多,它是一行的唯一ID,但它本身不能作为记录先后排序的根据,请使用Order By子句,这也是Oracle官方的解释。理论上来说加一个timestamp字段是最好的解决方案,也是避繁就简的方法,即使是trigger也有不好用的地方。
      

  10.   

    ROWID只适用于未作删改的表。像楼主这种问题,应该在建表的时候就留好后路,增加一列时间,取数据插入的时间。
      

  11.   

    这涉及到你的表结构设计,一般每个表中都会有一个内部序列号做为主键,是从序列号生成器中取值,这个字段在界面中是不显示的。类似oracle的rowid的功能。
    根据这个内部序号取最大就行了。
      

  12.   

    问题已解决了,多谢大家的回答。通过row id是不行,max(rowid)是取出左后已行记录,是位置,而不是时间。
      

  13.   

    rowid不行的,不过可以加一个列,从sequence取值,用这个值来判断最后,不过这个做法和makedate差不多的方式,不过10g开通的row dependencies的话,虽然做不到你这样的要求。不过找到最后更新的记录,倒是可以做到的,如果开通row dependencies的话,伪列ora_rowscn将会记录下该条记录的修改的scn号,scn号和timestamp是对应的,scn越大 timestamp也就越到,也就找到最后更新的记录了。==================================================================
    Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    电子邮件:[email protected]
    网站: http://www.inthirties.com
      

  14.   

    select * from <表名> where rowid=(select max(rowid) from <表名>);