2013-04-04 111 views
0

我正在使用Oracle數據庫,我有一個有19億行記錄的表。我想要獲得從100,000,001到200,000,000不等的記錄行。有人可以幫助我嗎?先謝謝你。如何獲取表格的特定行?

+2

您可以顯示迄今爲止寫入的SQL嗎?也許還包括有問題的桌子的結構? – 2013-04-04 09:47:13

+1

什麼是100,000,001到200,000,000?這些ID列值? – IndoKnight 2013-04-04 09:48:40

+0

http://psoug.org/definition/ROWNUM.htm – Jean 2013-04-04 09:49:37

回答

2

一般來說你想要一個分頁查詢,這將是以下格式:

select t.* 
    from (select t.*, rownum rn 
      from (select t.yourfields 
        from yourtab t 
        order by t.something) 
      where rownum <= end_rownum 
     ) t 
    where rn >= offset; 

select * 
    from (select t.yourfields, row_number() over (order by t.something) rn 
      from yourtab t) 
where rn between start_rownum and end_rownum; 
+0

爲什麼你要在這裏選擇兩倍?選擇rownum的單選也應該有效。 – IndoKnight 2013-04-04 10:12:27

+0

@Indoknight:你的意思是,它在你的答案中的方式? – 2013-04-04 10:13:44

+2

@Indoknight - 因爲這就是'rownum'的工作原理;這是一個值何時分配給僞列的問題。 [請參閱文檔](http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm)以獲取更多信息。特別是'ROWNUM值大於正整數的條件測試總是錯誤的'行以及該示例後面的段落。 – 2013-04-04 10:15:56

0

,如果你的意思是那些範圍rownum那麼這裏就是簡單的查詢

select * from (select e.*,rownum test from hr.employees e) where test>5 and test <50; 
+0

這是情況。我正在使用Sybase ETL將表從Oracle數據庫遷移到Sybase IQ。該表有19億條記錄,我希望按批次切分數據。例如,我的配料量爲:1至100,000,然後100,000,001至200,000,000,然後200,000,001至300,000,000等。我對Oracle有一些瞭解,所以我需要幫助我如何批量處理數據? – 2013-04-05 05:28:13