我有这么一张表pnbody, BODYID PN
----------- -----------------------------------------------------
2 US2010289329 A1 20101118 DW201077
3 DE102010014588 A1 20101118 DW201077
4 DE102010017920 A1 20101118 DW201077
4 US2010288367 A1 20101118 DW201077
1 RU2404384 C2 20101120 DW201077
2 JP2010268594 A 20101125 DW201077
这表就bodyid,pn两列, bodyid是外键,和pn列是一对多的关系,我想问的是:怎样才能保证之后我查出数据时,控制相同bodyid的pn的和我添加时的顺序一样,例如bodyid = 2;这列 查询select * from pnbody order by bodyid 结果这样:
BODYID PN
----------- --------------------------------------------------------------------------------
1 RU2404384 C2 20101120 DW201077
2 US2010289329 A1 20101118 DW201077
2 FR2945685 A1 20101119 DW201077
2 JP2010268594 20101125 DW201077
3 DE102010014588 A1 20101118 DW201077
----------- -----------------------------------------------------
2 US2010289329 A1 20101118 DW201077
3 DE102010014588 A1 20101118 DW201077
4 DE102010017920 A1 20101118 DW201077
4 US2010288367 A1 20101118 DW201077
1 RU2404384 C2 20101120 DW201077
2 JP2010268594 A 20101125 DW201077
这表就bodyid,pn两列, bodyid是外键,和pn列是一对多的关系,我想问的是:怎样才能保证之后我查出数据时,控制相同bodyid的pn的和我添加时的顺序一样,例如bodyid = 2;这列 查询select * from pnbody order by bodyid 结果这样:
BODYID PN
----------- --------------------------------------------------------------------------------
1 RU2404384 C2 20101120 DW201077
2 US2010289329 A1 20101118 DW201077
2 FR2945685 A1 20101119 DW201077
2 JP2010268594 20101125 DW201077
3 DE102010014588 A1 20101118 DW201077
select * from pnbody order by bodyid,rowid
在没有别的办法了吗?类似pnbody的 表有好几张了
select * from pnbody order by bodyid,rowid
建议增加一列id,使用sequence构造自增列.来记录插入的顺序.
之所以rowid不能用来标识插入顺序.
比如一个extent由8个块组成.每个块可以存储30条数据(插入30条到达ptfree,删除10条,即20条记录时即可再插入记录).
开始插入了240条记录,8个块全部用完,后来块3中的记录被删除20条,块被重用,新插入的10条记录被记录到块3,那么新插入的记录的rowid会比之前在块8中插入的记录的rowid还要小.
另外,行迁移是不影响rowid的.行迁移的列需要两次io,第一次从rowid对应的位置读取真正的存储位置,第二次io才能取到记录.也就是说行迁移时,不是改变rowid,而是在原rowid对应的存储位置存储一个指向新位置的指针.