我想在一个表里增加一个时间戳,然后数据有变化的时候相应的时间戳也改变。 
1 不知道如何获得那么高精度的时间
2 时间戳是否会重复
3 时间戳还有什么别的用法吗?有点迷茫,请大家详解!

解决方案 »

  1.   

    使用timestamp类型,不会有问题
    不会重复
    估计你得写一个update触发器,以更新时间戳的值。insert时直接使用当前时间
      

  2.   


    SQL> desc tb;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ------------
     ID                                                 NUMBER(5,2)SQL> alter table tb
      2  add dt timestamp(6)
      3  /表已更改。SQL> insert into tb(dt) values(systimestamp);已创建 1 行。SQL> select * from tb;        ID
    ----------
    DT
    ----------------------------------------------------------------27-5月 -10 01.34.01.609000 下午
    SQL> select to_char(dt,'yyyy-mm-dd hh24:mi:ss:ff3') from tb;TO_CHAR(DT,'YYYY-MM-DDHH24:MI
    -----------------------------
    2010-05-27 13:34:01:609
      

  3.   

    我试过了 systimestamp 显示的精度为秒后6位。 大数据量插入 在我的pc上 每100-200条数据 时间戳都会重复。 对于一般的系统没什么问题,但是用户多或者一次处理成千上万条数据就不行了。 比如我update一个字段,表里数据比较多的话就会有时间戳重复。 和微软的时间戳机制不太一样。微软的更像是oracle里的序列。
      

  4.   

    你想要sqlserver里的rowversion?oracle里没有对应的东西。不过有个差不多的东西, 叫做ora_scn, 但这个东西由于不是一致读的,所以在where条件中使用时在大并发情况下就有问题。
      

  5.   


    查了一下,是:ORA_ROWSCN 
      

  6.   

    这个似乎要oracle10g才支持,而且设计表的时候就要定义好,事后不能修改,如果实在没有方法我也就结贴了。
      

  7.   

    主键联合时间戳就是where里两个条件了
      

  8.   

    LZ是什么系统,有这么高的时间精度要求,6位tiamstamp不够改成9位也不行吗?
      

  9.   

    关键是批量导入和批量更新就会造成很多时间戳重复,我做过测试的。 至于9位精度会好很多,可是取不到那么精确的时间呢,systimestamp 这个只有六位啊。
      

  10.   

    同一条sql更新的数据,时间戳怎么能不一样了。在外面看来 都是同时更新的啊
      

  11.   

    联合条件就是Oracle的UNIQUE CONSTAINT.
    CONSTRAINT cr_name UNIQUE (Id,ts)
    即把Id(主键)和ts(即timestamp)联合起来作为唯一性约束条件。就是说,要Id和ts两个都一样,才认为是重复的记录。