8

我正在开发一个 Java Web 服务,当从 IBM 中型机器 (AS400) 上的 DB2 数据库获取大数据集时允许分页。

例如; 如果数据集中有 10000 条记录,我想一次在 1000 个块中获取它们。

我发现这篇文章解释了我可以使用 LIMIT 和 OFFSET。但我需要将DB2_COMPATIBILITY_VECTOR变量设置为MYS.

现在我一直在谷歌搜索,看到你可以使用db2set来设置这个变量。但是我一直找不到在哪里输入这个命令?

我正在 Windows 机器上进行开发,并且安装了 iSeries,并且可以通过 iSeries 5250 仿真器访问 IBM Mid Range Machine。

我知道这一定是一个真正的菜鸟问题,但是我该如何将DB2_COMPATIBILITY_VECTOR变量更改为MYS

4

2 回答 2

11

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 函数的子选择,而不是 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
于 2014-01-21T12:13:49.263 回答
11

从 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

有关详细信息,请参阅本文...

于 2016-06-28T17:54:14.933 回答