• ベストアンサー

Select時に取得行番号を指定する方法って・・

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#182251
noname#182251
回答No.2

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

すると、全ての回答が全文表示されます。
noname#182251
noname#182251
回答No.1

データベースが何か判らないので確言できませんが SELECT TOP 1000 は利用できないのでしょうか? できるならばあとは「処理済みフラッグ」フィールドなどを併用すればよろしいのでは。

すると、全ての回答が全文表示されます。

関連するQ&A