dポイントプレゼントキャンペーン実施中!

ご相談したい事があります。

Oracle9iにて約100万件あるデータを抽出するのに一度に100万件を抽出すると時間が掛かってしまうと思い、rownumを使用して1万件単位で抽出したいのですが、SqlPlusにて以下のSQLを実行すると「レコードが選択されませんでした」と返ってきます。

SELECT * FROM tbl WHERE rownum >= 10001 AND rownum <= 20000;

どうしてなのでしょうか?rownumではこのような使い方では使用できないのでしょうか?
ちなみにWHERE以下を
rownum >= 1 AND rownum <= 10000;
にすると1万件抽出できます。

お分かりの方がいらっしゃれば、ご教授願います。

A 回答 (3件)

ROW_NUMBER関数を使用すると、データの絞込みが行えます。

    • good
    • 0
この回答へのお礼

ROW_NUMBERですかぁ。試してみます。ご回答ありがとうございます。

お礼日時:2005/01/20 10:07

使用できません。


rownum列は必ず1から始まるので、途中からのselectはできないハズです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2005/01/20 10:09

こんばんは。



SELECT *
FROM (SELECT ROWNUM as rn, * FROM tbl)
WHERE rn >= 10001 AND rn<= 20000;
ですか。

そもそもROWNUMとは、取得した結果セットを内部的にFETCHして、LIMITを掛けています。
つまり、1回のROWNUMだけだと、STOP位置を決定するに過ぎません。
ので、いったんROWNUMをシーケンシャルに保持させた一時テーブルを作成し、再度取得しなおす必要があります。
シーケンシャルとは、あくまでも内部的にFETCHしている順序に依存します。
ORDER BY句がない場合、次回同じSQLを発行しても、その順序は保証されません・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2005/01/20 10:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!