ORACLEとMYSQL

apexのご案内

今まで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の勉強が足りないなと思う日でした。

フォーム

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です