insert后的数据顺序和insert前SELECT出来的数据顺序不一样,请高人指点下

c001100c 2009-06-30 07:48:39
环境:pb90+oracle817

insert into MAIN (spbm,bs,lsj,bmh,xstm,bzq,name)
select a.code,'0',b.lsj,'','',a.BZQTS ,a.name
from commod a,COMMOD_GZ_GYS b
where (a.unit='公斤' or a.unit='KG' or a.unit='千克' or a.unit ='1000克')
and a.status='Y' and a.splb<>'9' AND a.CODE=b.CODE(+) AND b.MC=FGETMC() order by a.rowid asc ;

插入完后,select * from main 表的结果顺序如下图

spbm bs lsj .....
109834
109835
109836
109837
109715

而用select a.code,'0',b.lsj,'','',a.BZQTS ,a.name
from commod a,COMMOD_GZ_GYS b
where (a.unit='公斤' or a.unit='KG' or a.unit='千克' or a.unit ='1000克')
and a.status='Y' and a.splb<>'9' AND a.CODE=b.CODE(+) AND b.MC=FGETMC() order by a.rowid asc ;
顺序是
spbm bs lsj........
109715
109716
109717
109718
109719
109720 这个顺序是我想要的顺序,不知道为什么,INSERT后顺序就变了,是在是搞不动。游标也试过了,调试的时候取的顺序也是109715,109716......,可是插到MAIN表中,结果就变了,请高手指导下。谢谢

...全文
894 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenshu 2009-07-01
  • 打赏
  • 举报
回复

order by spbm

不要ORDER BY ROWID

那个只是物理上的唯一值,并没有人为你保证后插入的一定比先插入的大.
永生天地 2009-07-01
  • 打赏
  • 举报
回复
只能说明 用insert into *** select *** from *** order by ***时

并没有按照order by的顺序执行,order by是保证显示顺序

实际插入还是按照物理存储的顺序来执行的
c001100c 2009-07-01
  • 打赏
  • 举报
回复
问题已经处理完了,谢谢各位,SELECT 只能保证显示的顺序是,而插入的顺序是不能保证和,显示出来的一致,是不可控制的,我现在的处理方法是,用游标按SELECT 出来的顺序一个一个的取,然后用 FOR 循环,一个一个的插,又在MAIN表中加一列,存放FOR 循环的I取出来的值,最后的数据窗口在按ID排序,这样一来
select a.code,'0',b.lsj,'','',a.BZQTS ,a.name
from commod a,COMMOD_GZ_GYS b
where (a.unit='公斤' or a.unit='KG' or a.unit='千克' or a.unit ='1000克')
and a.status='Y' and a.splb <>'9' AND a.CODE=b.CODE(+) AND b.MC=FGETMC() order by a.rowid asc ;
的顺序就和 SELECT * FROM MAIN ORDER BY ID的顺序就都一样了。
singsongs 2009-07-01
  • 打赏
  • 举报
回复
根据spbm排序啊。
shunan 2009-06-30
  • 打赏
  • 举报
回复
main表中select时候是否有order by一下?
sinlan 2009-06-30
  • 打赏
  • 举报
回复
都是升序,实在不知你想要的是什么
c001100c 2009-06-30
  • 打赏
  • 举报
回复
怎么没有人回复我的问题啊

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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