本帖最后由 dedicated_download 于 2010-08-04 11:47:40 编辑

解决方案 »

  1.   

    selecg max(属性) from 表名
      

  2.   

    select max(id) from 表名
      

  3.   

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

  4.   

    exec dbms_stats.flush_database_monitoring_info;
    alter table test monitoring;
    select * from sys.dba_tab_modifications where table_name like '%TEST%'楼主看看这三个语句,我以前用过,请参考。
      

  5.   


    插入的记录用rowid不一定行把?如果前面的数据块释放了,去写数据的话rowid最大的。
      

  6.   

    最后一行?没有时间字段?有增长的序列?如果都没有,试试FLASHBACK,得到最后一条更新的或者插入的ROWID,然后得到数据
      

  7.   

    如何根据 flashback 得到最后一条更新的或者插入的ROWID。。还有6楼的我看不懂,不能不能说明下
      

  8.   

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

  9.   

    显然,select * from emp t1 where rowid=(select max(rowid) from emp);
    此法不行!
    若是更新操作,不会变rowid的值的!
    提供一个flashback的查看结果,下面是我的一个例子:
    SQL> select versions_xid,versions_startscn,versions_endscn,
      2  DECODE(versions_operation,'I','insert','U','update','D','delete', 'original') "Operation",
      3  id from A versions between scn minvalue and maxvalue;VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operation         ID
    ---------------- ----------------- --------------- --------- ----------
    08000B00B0280000          33580963                         delete             5
    08000B00B0280000          33580963                         delete             4
    08000B00B0280000          33580963                         delete             3
    08000B00B0280000          33580963                         delete             2
    08000B00B0280000          33580963                         delete             1
    08001600AF280000          33580751        33580963         update             1
    0A001D00D1280000          33580722       33580751         update             1
                                              33580722          original           1
                                              33580963          original           2
                                              33580963          original           3
                                              33580963          original           4
                                              33580963          original           5
    通过上面的versions_endscn可以查看到最后一次操作是什么。你试试.
      

  10.   

    从我上面的结果可以看出:
    删除操作是最后一步,因为对应的VERSIONS_ENDTIME是NULL。
      

  11.   

    恩,用flashback。
    SQL> DROP TABLE test;
     
    Table dropped
     
    SQL> 
    SQL> CREATE TABLE test
      2  (ID NUMBER(20),
      3   NAME VARCHAR2(20));
     
    Table created
     
    SQL>  INSERT INTO test VALUES(1,'a');
     
    1 row inserted
     
    SQL>  UPDATE test SET ID=2;
     
    1 row updated
     
    SQL> 
    SQL> WITH a AS(SELECT row_number()over(ORDER BY versions_starttime ) rn,versions_starttime,ROWID rd FROM test
      2   VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
      3   WHERE versions_operation IN ('I','U'))
      4   SELECT * FROM test b WHERE b.rowid=(SELECT rd FROM a WHERE  rn=1)
      5  ;
     
                       ID NAME
    --------------------- --------------------
                        2 a
     
    SQL>