日々のアンテナ

ARTICLE PAGE

[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技術は日進月歩で、常に新しいものを勉強していかなきゃならないのがつらいな。

Comments 0

Leave a reply