我有一张表,里面的date属性设置了唯一约束,这样写存储过程的时候就出了问题,当连续插入两条sysdate的时候,调试时没有问题,因为会有时间间隔,而直接运行的时候速度太快,sysdate来不及变,就会违反唯一约束条件,插入失败,谁知道怎么解决这个问题,我的表结构跟约束是不可能变的,我在想可不可以让这两条数据插入的时候中间有个延时之类的功能,这样sysdate就不会一样了,谁知道怎么解决啊?????

解决方案 »

  1.   

    可以在PL/SQL代码中使用延时操作。
    DBMS_LOKC.SLEEP(毫秒数);
      

  2.   

    可以在PL/SQL代码中使用延时操作。
    DBMS_LOKC.SLEEP(毫秒数);
      

  3.   

    顶下:select systimestamp from dual;
      

  4.   

    lz万万不可延时,此乃下下之策啊.
    别人努力想把performance提高,lz反其道而行之,必将遭人唾骂.
    修改字段类型为timestamp,插入数据时使用systimestamp即可
      

  5.   


    没有必要延时,两个解决方向:
    1. 如大家所言,换成时间戳
    2. 不使用sysdate,使用程序更改该时间点,例如:
    insert into table1 (dt)
     select  sysdate + rownum/(24*60*60) from table2; --每条记录延时1秒
      

  6.   

    使用systimestamp又如何,楼主的表结构不能改变,存储时还是原来的Date类型,秒后面的数据又不能存储进去。
      

  7.   

    主要是靠需求,确认有那个需求的话,
    改为timestamp
    值为:systimestamp 毫秒级的!
      

  8.   

    就用timestamp理论上也有问题,不能排除有多个请求时间同时进行,尤其是遇到访问数据库的线程比较多时,时间相同的概率很大,这个只能从需求上来进行规避。时间作为唯一性这种需求还真少见哈