日々のアンテナ

日々アンテナを貼って、いろんな情報をキャッチ、発信したいと思います。
2017年10月 ≪  123456789101112131415161718192021222324252627282930 ≫ 2017年12月
TOPお仕事のこと ≫ [oracle]oracleでn~m レコードの取得

[oracle]oracleでn~m レコードの取得

ORCLEで何件目から何件目というように範囲を指定してデータを取得する場合

最初の30件だけ取得というのは

SELECT * FROM DUAL WHERE ROWNUM <=30


でできるんだけど、
31件目から60件目というのは


SELECT * FROM DUAL WHERE 31 <= ROWNUM AND ROWNUM <=60


ではできない。不思議ー。
と、のんきに言ってる場合じゃなくて困ってたんだけど、

SELECT *
FROM (SELECT T.*,rownum as RM from TABLE_NAME T)
WHERE RM >=31 AND RM <=60;

でできることがわかりました。
ただ今回はORDER BY しなければならないので、これだと順序がずれる可能性があるらしい。
また性能が著しく悪い感じ。

そこで、row_number()関数を使い、

SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY HOGE) RNO, T.* FROM TABE_NAME T
)
WHERE RNO BETWEEN 31 AND 60
ORDER BY HOGE;

とするとうまくいきました!

http://www.shift-the-oracle.com/sql/select-top.html

↑こちらを参考にさせていただきました♪

今回は、flex、java、oracle、jqueryと私にとっては新分野ばかりでかなり大変です。
おまけにお客様のサーバがsoralisからlinuxに移行し、それも大変です。
これを身につければ今後食べるのに困らない、ってなればいいけど、IT技術は日進月歩で、常に新しいものを勉強していかなきゃならないのがつらいな。

Comment













非公開コメントにする
Trackback

Trackback URL