我正在开发Java Web服务,允许在从IBM Mid Range Machine(AS400)上的DB2数据库中获取大数据集时进行分页。
例如;如果数据集中有10000条记录,我想一次以1000个块的形式获取它们。
我发现这个article解释了我可以使用LIMIT和OFFSET。但我需要将DB2_COMPATIBILITY_VECTOR
变量设置为MYS
。
现在我一直在谷歌搜索,看到你可以使用db2set
来设置这个变量。但是我还没找到在哪里输入这个命令?
我在Windows机器上开发,我安装了iSeries,并且可以通过iSeries 5250仿真器访问IBM Mid Range Machine。
我知道这一定是一个真正的noob问题,但如何将DB2_COMPATIBILITY_VECTOR
变量更改为MYS
?
答案 0 :(得分:9)
DB2 for Linux Unix Windows(LUW)和DB2 for iSeries是不同的产品。可能,DB2 for iSeries不支持DB2_COMPATIBILITY_VECTOR。我无法在iSeries信息中心找到它。
您可以使用FETCH FIRST 10 ROWS ONLY子句代替LIMIT。
您应该能够使用ROW_NUMBER olap function的子选择,而不是LIMIT和OFFSET。像这样:
SELECT emp.EMPNO, emp.SALARY
FROM (
SELECT EMPNO, SALARY,
ROW_NUMBER() OVER(ORDER BY SALARY DESC) as row_number
FROM EMPLOYEE
) emp
WHERE emp.row_number > 10
AND emp.row_number <= 20
答案 1 :(得分:7)
从IBM i 7.1 TR11或IBM i 7.2 TR3开始,现在支持使用LIMIT
/ OFFSET
的正常现代分页:
SELECT SalesOrderId,OrderDate,DueDate,ShipDate,
Status,CustomerId,SubTotal,TaxAmt
FROM SalesOrderHeader SOH
WHERE CustomerId=@CustomerId
ORDER BY SalesOrderId DESC
LIMIT @ROWS_PER_PAGE -- Variable = 10
OFFSET @PAGE_START_ROW -- Variable = 10 * Page Number