2011-07-11 11 views
0

テーブルXYZ(IDの主キー、名前)。テーブルに10000を超える行があります。 私はテーブルから最初の1000行にtime.Forで私はこれを1000行を処理し、その後、私はテーブルから選択範囲の行

select * from XYZ where rownum >=1 and rownum <= 1000 

が、用を使用して取得することができ、最初の1000行results.Forごとにテーブルを更新したいです次の1000行は、私は、クエリは、Oracle 11gデータベースを使用していますquery.Please help.Iの書き方を0 rows.Anyのアイデアを提供します

select count(*) from XYZ where rownum >=1000 and rownum < 2000 

を書く場合ため、クエリを作成する方法を知りません。

答えて

3

rownumは実際の列ではなく、1から始まり上向きにカウントされる行が生成されると生成される疑似列です。

だから、あなたのクエリ:行を戻さない

select * from XYZ where rownum >= 1000 and rownum <= 2000

。どうして? Oracleは最初の行を生成し、その行に1のrownumを割り当てます。次に、結果セットに含める必要があるかどうかを確認します。 Rownum < 1000、そうではありません。それは次の行に進み、未だ使用されていない次のローバンを使用します...まだ1です。表の終わりまで繰り返します。

あなたは本当の列にrownumを変換するために副選択を導入する必要があります。

select * from 
    (select rownum r, * from xyz) inner 
where 
    inner.r >= 1000 and inner.r <= 2000 

は、あなたが本当に望む結果を得るために。

+0

あなたの回答に感謝します。このクエリを使用すると、最適化されます。私たちは10000行を最初にフェルトし、結果から1000行を選択しているためです。 – facebook