ORACLEとMYSQL
今までMYSQLしか触っていなかったのですが、先日ORACLEに触れて、随分と悩まされました。
事前にORACLEのことを調べていて、LIMITがORACLEでは使えないのは知識としては知っていたつもりでした。
ROWNUMを使って対処するという話で
SELECT *, ROWNUM FROM ( SELECT col_name as A FROM tabl_name ORDER BY A ) where ROWNUM 1 AND 100
という流れで実行した結果、上手く動いたようですが、これが101から200をとろうとすると何故かデータが取れない。ちょっと調べてみると擬似列であるROWNUMでは1~n件のデータはデータベースから取得できてもn(n>1)からm(m>n)件のレコードは取れない様子。
ちょっとこれは事前の調査不足でした。
ROW_NUMBER()関数を使おうと思っていたのですが、プログラムとSQLの都合で、ROW_NUMBER()の後のOVERの中でソートしたくない。
OVERを外せば何故かエラーが出る。
その関係でROW_NUMBER()関数を一旦使わない方向でSQLを再検討しました。
(もうちょっとやりようがあると思うので、気軽に試せる環境があればROW_NUMBER()関数でなんとかなった気がしますが)
最終的には
SELECT * FROM ( SELECT *, ROWNUM FROM ( SELECT col_name as A FROM tabl_name ) ) where ROWNUM 101 AND 200
のようにSELECT文を丸ごともう一度FROMで呼び出して……、ちょっとデータベースの処理が重くなる気がしますので考え直したい気持ちもありますがこれで対処しました。
まだまだSQLの勉強が足りないなと思う日でした。
author: 名もなきハト社員