您的位置:首页 > 数据库 > Oracle

ORACLE 导大数据混合使用rownum和order by引起的乱序问题

2017-06-10 11:58 351 查看
原排序代码:

      select id ,rn from(

                   select id ,rownum rn from temp_org order by  id )

          where rn >10000 and rn <15000

由于原库是生成库,所以为了安全起见,我新建了一张临时表 :create table temp_org as select * from org,这个建表语句最大的好处就是可以非常简单的把数据从源表移动到新的临时表,但是却不能把主键,索引之类的带过来,只是一个简单的数据表。

order by和rownum同时使用时,只有id是primary key才会先执行order by,不然会优先给rownum赋值,所以以上语句查出来的结果会看到id是正序的,但是rownum乱序。

正确语句:

     select * from

  (select ORG_ID ,rownum rn from (

      SELECT 

          ORG_ID

      FROM TEMP_ORG order by org_id )order by rn )

  where   rn > 100000  and rn < 150000 

虽然是乱序,但是就我目前使用来看,好像问题不是非常大。由于安全,本次导数据只能先导出数据文件(SQL文件,CSV文件),然后再导入开发库,但是由于网络原因或者这个排序的原因(未确定原因,但是个人感觉网络丢包的可能性比较大),导致部分数据丢失。

向着更好的方向前进,希望本文帮到需要的人。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: