我有一张桌子 -
emp_record
有40,000条记录 我想从java代码中获取记录,下面是要求 -
select *
from(
SELECT a.*,rownum rn
FROM distributor a)
WHERE rn >= 3000 and rn < 4000;
非常感谢任何形式的帮助。
答案 0 :(得分:3)
这听起来非常人为,因为40.000记录什么都不是。我只想在一个查询中阅读它们,也许可以分批将它们分开。在这种情况下,您可以使用statement.setFetchSize(1000)
使JDBC驱动程序一次获取1000条记录,并将其定位为解决需求。
或者,如果您使用的是Oracle 12,则可以使用:
select * from distributor
order by something_unique
offset x rows fetch next 1000 rows only
其中x是起始位置。它与rownum构造完全相同,但语法更好。
答案 1 :(得分:0)
您可以首先使用主键/唯一键对行进行排序,从而使用使用ROWNUM
的查询。来自查询的想法:Best practice for pagination in Oracle?
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM emp_record
ORDER BY pri_key_col) A
WHERE rownum <= :n * 1000)
WHERE rn > (:n - 1) * 1000;
pri_key_col
:表格的主键/唯一键列。n
:表示批次的数字。如果n = 1,则返回1000
以这种方式订购的记录,n = 2给出下一个1000,依此类推。