ORACLE 導大資料混合使用rownum和order by引起的亂序問題
阿新 • • 發佈:2019-01-28
原排序程式碼:
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檔案),然後再匯入開發庫,但是由於網路原因或者這個排序的原因(未確定原因,但是個人感覺網路丟包的可能性比較大),導致部分資料丟失。
向著更好的方向前進,希望本文幫到需要的人。