菜鸟有问题请教,急!!!在线等

s7323522 2010-12-27 10:22:22
我有这么一张表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
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
心中的彩虹 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 da21 的回复:]
对于行迁移,用rowid排序是否会有问题??
[/Quote]
最好是加个 date 字段 默认插入sysdate
minitoy 2010-12-27
  • 打赏
  • 举报
回复
用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对应的存储位置存储一个指向新位置的指针.
da21 2010-12-27
  • 打赏
  • 举报
回复
对于行迁移,用rowid排序是否会有问题??
Oraclefans_ 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s7323522 的回复:]

引用 1 楼 oraclefans_ 的回复:
----加上rowid就可以了。
select * from pnbody order by bodyid,rowid


在没有别的办法了吗?类似pnbody的 表有好几张了
[/Quote]
问题是你需要记录你插入时候的插入的顺序,要不你就必须修改表结构,在pnbody里加上个字段使用序列来自动分配,然后根据这个字段排序,使用rowid也应该不难吧。。
心中的彩虹 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 s7323522 的回复:]
我有这么一张表pnbody,

BODYID PN
----------- -----------------------------------------------------
2 US2010289329 A1 20101118 DW201077
3 DE102010014588 A1 20101118 DW201077
4 DE102010017920 A……
[/Quote]



select * from pnbody order by bodyid,rowid

s7323522 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oraclefans_ 的回复:]
----加上rowid就可以了。
select * from pnbody order by bodyid,rowid
[/Quote]

在没有别的办法了吗?类似pnbody的 表有好几张了
Oraclefans_ 2010-12-27
  • 打赏
  • 举报
回复
----加上rowid就可以了。
select * from pnbody order by bodyid,rowid
s7323522 2010-12-27
  • 打赏
  • 举报
回复
谢谢大家了!表结构改了,加了pnid
物润声无 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wkc168 的回复:]
引用 5 楼 da21 的回复:
对于行迁移,用rowid排序是否会有问题??

最好是加个 date 字段 默认插入sysdate
[/Quote]
加盖时间戳
本套餐将包括两个重磅性的课程与一个赠送学习的课程,分别为SpringBoot实战视频教程与RabbitMQ实战教程跟SSM整合开发之poi导入导出Excel。目的是为了让各位小伙伴可以从零基础一步一个脚印学习微服务项目的开发,特别是SpringBoot项目的开发,之后会进入第二个课程:RabbitMQ的实战,即消息中间件在实际项目或者系统中各种业务模块的实战并解决一些常见的典型的问题!核心的知识点分别包括 一、SpringBoot实战历程课程 (1)SpringBoot实战应用场景的介绍与代码实战 (2)发送邮件服务、上传下载文件服务、Poi导入导出Excel (3)单模块与多模块项目构建、项目部署打包、日志、多环境配置、lombok、validator以及mybatis整合实战跟多数据源实战 (4)Redis缓存中间件的实战与缓存雪崩跟缓存穿透等问题的解决实战 (5)RabbitMQ消息中间件在业务模块异步解耦、通信、消息确认机制以及并发量配置等的实战 二、RabbitMQ实战教程课程 (1)RabbitMQ的官网权威技术手册拜读,认识并理解各大专有名词,如队列,交换机,路由,死信队列,消息确认机制等等 (2)RabbitMQ在业务服务模块之间的异步解耦通信实战,如异步记录日志与发送邮件等 (3)商城系统抢单高并发情况下RabbitMQ的限流作用与代码实战 (4)消息确认机制与并发量配置并用来实战商城用户下单 (5)死信队列深入讲解与DLX,DLK,TTL等概念的讲解并用来实战 “支付系统用户下单后支付超时而失效其下单记录”实战 详情,各位小伙伴可以查看两个课程的目录。相信学完该套餐相关课程后,你的实战能力将大大提升!涨薪将不再遥遥无期! 最后,赠送的SSM整合开发之POI导入导出Excel目的是为了让各位小伙伴也可以学习Spring+SpringMVC+Mybatis整合开发的项目,让大家一对比SpringBoot与SPring的项目开发流程以及复杂程度!!! 相信学完之后,你会对SpringBoot爱不释手!!

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧