アプリ版:「スタンプのみでお礼する」機能のリリースについて

Select文の時、大量データを処理する場合(java)、レコードセットクラスのnextメソッドでレコードを取得していますが、取得レコードが大量になるとnextメソッド内でヒープサイズがオーバーし、例外が発生してしまいます。なのでトランザクションを複数回にわけて発行し、全件処理したいのですが、Select時に例えば1件~1000件目まで取得とか、1001件から2000件まで取得とかって可能でしょうか?ちなみにDBはDB2を使用しています。

A 回答 (3件)

DB2は、「OFFSET m LIMIT n」といった機能をサポートしていません。


「FETCH FIRST n ROWS ONLY」やOLAP関数を使用する方法で、実現できると思います。

(1)先頭からn件のみ検索
SELECT * FROM T1 ORDER BY C1 FETCH FIRST n ROWS ONLY

(2)m行目~n行目のみ検索
SELECT X.C2,X.C1 FROM
(SELECT C2,C1,ROWNUMBER() OVER (ORDER BY C1) AS ROWNUM FROM T1) AS X
WHERE ROWNUM BETWEEN m AND n
ORDER BY ROWNUM
    • good
    • 0

#1です


>ちなみにDBはDB2を使用しています
をなぜか読み落とし。失礼しました(^^;
DB2は名前を知っている程度なのでSELECT TOP 1000が可能かどうか全く判りません。
    • good
    • 0

データベースが何か判らないので確言できませんが



SELECT TOP 1000

は利用できないのでしょうか?
できるならばあとは「処理済みフラッグ」フィールドなどを併用すればよろしいのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!