RMI でスレッド起動されるロジックにおいて、数十万程度の処理対象レコードを DB から一度に読みこむ形でプログラムを実装してたのだけれど、あんまり RMI が呼ばれすぎるとメモリが枯渇してヤベーみたいな話になったので、ページングさせて小分けに処理することになった。
Oracle DB だと確かページング用の命令があったよなーと思って調べたのだけど存在してなくて、ぼくの記憶は完全にクソということが判明。実直に ROW_NUMBER を使ってページングする流れ。
SELECT SEQA, SEQB FROM ( SELECT SEQA, SEQB, ROW_NUMBER() OVER (ORDER BY SEQA, SEQB) RNO FROM TABLEA WHERE HOGE HOGE HOGE ) WHERE RNO BETWEEN from AND to ORDER BY RNO