关于oracle数据插入排序的问题

Paul_哈根达斯 2015-09-16 10:34:13
现有三张表a、b、c,
从b、c两张表里取数给a,
我先将数取出并按照某一个字段排序,后插入a表,
取数的部分单独运行是正常排序的,但插入a表后,最后面的几条数据总是排到了最前面,
我试了临时表、借助另一张表过渡都没用,
请问各位知道为什么吗?
谢谢
...全文
323 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Paul_哈根达斯 2015-09-17
  • 打赏
  • 举报
回复
因为我是直接写在存储过程里了,而后直接去取表里的数据,所以没法再进行一次order by排序,后来用视图解决了,还是谢谢大家!
binsweet 2015-09-17
  • 打赏
  • 举报
回复
个人认为插入表中数据的自然序没有意义,要让数据排序规范的是用 order by
xiongshao1943 2015-09-17
  • 打赏
  • 举报
回复
我认为嘛,想保证排序效果必需都得带上order by oracle文档说了不指定排序,不保证排序效果 你指定排序以后插入表以后表可能不是按照你指定顺序存储的,Oracle有自己的一套存储机制,我不大懂,也没去研究
Paul_哈根达斯 2015-09-16
  • 打赏
  • 举报
回复
引用 3 楼 chenfeng1122 的回复:
[quote=引用 2 楼 Paul_hagendaz 的回复:] @小灰狼W 我是在select时就跟了order by一个排序字段,刚才在前面加上了truncate表,但还是没变
你排序的字段是不是有null值?因为null值的字段排序的时候默认是最大的。你可以对null值处理,如 Nulls First(空值排前)和Nulls Last(空值排后); 比如 select时就跟了order by一个排序字段 Nulls Last;[/quote] 都是有值的,没有为null的
陈灬风 2015-09-16
  • 打赏
  • 举报
回复
引用 2 楼 Paul_hagendaz 的回复:
@小灰狼W 我是在select时就跟了order by一个排序字段,刚才在前面加上了truncate表,但还是没变
你排序的字段是不是有null值?因为null值的字段排序的时候默认是最大的。你可以对null值处理,如 Nulls First(空值排前)和Nulls Last(空值排后); 比如 select时就跟了order by一个排序字段 Nulls Last;
Paul_哈根达斯 2015-09-16
  • 打赏
  • 举报
回复
@小灰狼W 我是在select时就跟了order by一个排序字段,刚才在前面加上了truncate表,但还是没变
小灰狼W 2015-09-16
  • 打赏
  • 举报
回复
truncate A表以后,再插入,会按顺序排列 但即使是这样,select查询出来的顺序还是和执行计划有关,不一定会按照数据存储的顺序排列 因此,需要排序最好根据某个排序字段来order by ,这个才是比较合理的
小灰狼W 2015-09-16
  • 打赏
  • 举报
回复
没有必要纠结这个。如果你要排序,就应该将sort_id一并存到表里 然后查A表时加上order by sort_id 不加order by 表达式,oracle不保证排列顺序,不管数据实际上是怎么存储的
Paul_哈根达斯 2015-09-16
  • 打赏
  • 举报
回复
引用 5 楼 wildwave 的回复:
[quote=引用 2 楼 Paul_hagendaz 的回复:]
@小灰狼W 我是在select时就跟了order by一个排序字段,刚才在前面加上了truncate表,但还是没变

不是指取数据插入A表时的查询
而是从A表查询数据时。你是怎么知道后几条数据排在前面,因为做了一次select * from A 的查询对吧。表是记录的集合,如果要排序,就要加上排序写法,例如select * from a order by col1; 否则没有意义,若没有order by 表达式,Oracle只负责取出数据,不保证怎么排序[/quote]
我是这样写的,是一段存储过程中的一段:
insert into a
select * from(
这里是从b和c中取的字段数据
)
order by sort_id
;
commit;
然后我读a里的数据,
是像这样的显示的
小灰狼W 2015-09-16
  • 打赏
  • 举报
回复
引用 2 楼 Paul_hagendaz 的回复:
@小灰狼W 我是在select时就跟了order by一个排序字段,刚才在前面加上了truncate表,但还是没变
不是指取数据插入A表时的查询 而是从A表查询数据时。你是怎么知道后几条数据排在前面,因为做了一次select * from A 的查询对吧。表是记录的集合,如果要排序,就要加上排序写法,例如select * from a order by col1; 否则没有意义,若没有order by 表达式,Oracle只负责取出数据,不保证怎么排序

17,088

社区成员

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

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