id1 id2 content
1    1  
1    2
1    3
2    1
2    2现有一张表 需要id1相同的字段 给id2分配序列号。我现在用的是游标 加 序列号生成 每个id1都要建立删除一次序列 效率低 不知道有没有更高效的办法? 请教!!!

解决方案 »

  1.   

    并发强度不大的可以考虑用一张表记录当前使用的id1,和id1对应的最大的序列号,然后通过select max(no) from tab_name where id1= &id1 for update nowait;这样的方式获取最大的序列号,缺点就是并发访问量大的时候,等待
      

  2.   

    可能是我没有描述清楚 原来的表为:id1 id2 content
    1   
    1   
    1    
    2    
    2   现在要生成id1 id2 content
    1    1 
    1    2
    1    3
    2    1
    2    2 
      

  3.   

    row_number() over (partition by id1 order by ...) 
      

  4.   

     select id1,row_number()over(partition by id1 order by id1) as id2 from tt2;