見出し画像

Oracle Limitの代わりのRownum

最近の続きです。
今回は業務内で使ったRownumの話をば。

OracleはLimit句がない

OracleにはMySQLやPostgreSQLであるようなLIMIT句がありません。ですのでこのような書き方はエラーが返されます。

select * from Ndot Limit N ;

具体的なエラーとしては

行1でエラーが発生しました。:
ORA-009933:SQLコマンドが正しく終了されていません

みたいな。

代用のRownum

ではOracleでは指定した件数のみ取得したい場合はどうするかというとRownumを用います。
こちらはSelectの結果の行番号を返す疑似列となっています。例えば10件のみ取得したい場合は

select * from NNN where ROWNUM <= 10 ;

といった感じ。
こうすると行番号が10以下のレコードだけが選択されるため、10件のみレコードをとってくることができます。

諸注意事項

whereで =10 としてしまうと、10番目の実が表示されると思いきや実際は何も帰ってきません。

select * from NNN where ROWNUM = 10;

レコードが選択されませんでした。

なぜこうなるかというと、Rownumは結果セットの中での行番号を表しているためです。ですのでOffsetみたいなことをしたい場合はRownumを確定させてから範囲指定する必要がありひと手間加える必要があります。

select
 column1
FROM
    (
    Select
         column1   ,ROWNUM as RN
            from
            NNN
    )
Where
RN Between 100 and 200 ; 

こうすることで100~200行目の取得といった作業をできるようになります。

最後に

現状がペラペラの知識レベルだから触る度に何かしら勉強があります。
こんなかんじに出会ったものから食べていって少しでも知識を蓄えられたらと思います。ではまた。


N

私の常日頃の生活をベースに、皆さんの役に立てたり、探しているものを紹介できたらと思っています。今後もよろしくお願いします!