我有一组随机值,大约30个...现在要用这组值随机更新一个大约280W数据的表的一列.我把这组值放到了一个数组array里,然后不管用update t set col = array( round (dbms_random.value(1,30)) )
     还是update t set col = array( mod(abs(dbms_random.random),30) + 1 )
都不够随机更新后只有其中几个值...大部分都没随机到...
我想大概是默认用时间当seed,程序太快所以值都一样...有办法解决吗?还是只能改成游标做,我想那样就太慢了.

解决方案 »

  1.   

    可以分成7部分,每40W用这个UPDATE语句更新和COMMIT一次. :-)
      

  2.   

    oracle 里有 数组array()? 
      

  3.   


    可以模拟的..
    虽然程序要跑2-3分钟...可是只出现了4,5个值...还有20多个值没出现过..分块做是可以...可我现在只更新部分数据,
    又要带条件,又要用rownum去划范围..还要循环30次...觉得麻烦...我就想知道我用一条语句时,能不能避免seed集中的问题...
      

  4.   

    使用如下的方法,我试了3000条,很平均的.mod(MOD(abs(dbms_random.random),round(dbms_random.value(1,1999))),30) + 1