Sql 使用限制和偏移量的DB2
我正在开发一个JavaWeb服务,它允许在IBM中端机器AS400上从DB2数据库获取大数据集时进行分页 比如,;如果一个数据集中有10000条记录,我希望一次提取1000个块中的记录 我发现这解释了我可以使用极限和偏移。但是我需要将DB2_COMPATIBILITY_VECTOR变量设置为MYS 现在我已经在谷歌上搜索了一下,发现可以使用db2set设置这个变量。但是我还没有找到在哪里输入这个命令 我在windows机器上开发,安装了iSeries,并且可以通过iSeries 5250模拟器访问IBM中端机器Sql 使用限制和偏移量的DB2,sql,db2,ibm-midrange,sql-limit,Sql,Db2,Ibm Midrange,Sql Limit,我正在开发一个JavaWeb服务,它允许在IBM中端机器AS400上从DB2数据库获取大数据集时进行分页 比如,;如果一个数据集中有10000条记录,我希望一次提取1000个块中的记录 我发现这解释了我可以使用极限和偏移。但是我需要将DB2_COMPATIBILITY_VECTOR变量设置为MYS 现在我已经在谷歌上搜索了一下,发现可以使用db2set设置这个变量。但是我还没有找到在哪里输入这个命令 我在windows机器上开发,安装了iSeries,并且可以通过iSeries 5250模拟器访
我知道这一定是一个真正的noob问题,但我如何将DB2_COMPATIBILITY_VECTOR变量更改为MYS?DB2 for Linux Unix Windows LUW和DB2 for iSeries是不同的产品。很可能,DB2foriSeries不支持DB2_兼容性_向量。我在iSeries信息中心找不到这方面的信息 您可以使用FETCH FIRST 10 ROWS ONLY子句代替LIMIT 您应该能够使用带有的子选择,而不是限制和偏移。大概是这样的:
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
从IBM i 7.1 TR11或IBM i 7.2 TR3开始,现在支持带限制/偏移的普通现代分页:
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
我遇到了这个解决方案,但性能非常慢,我希望找到更快的解决方案。遗憾的是,我开始相信这可能是唯一的方法:许多“ThisSQL太慢”的问题可以通过适当的索引来解决。在IBM i Navigator中运行index adviser,然后创建推荐的索引。值得注意的是,ROW_NUMBER函数有一些限制,其中之一是它不允许您使用视图。@ZioN我使用的是IBM i v6r1,我可以毫无问题地将ROW_NUMBER应用于视图。对于DB2forIv6r1。正如Leons所指出的,您需要使用ROW_NUMBER函数,您应该将JDBC驱动程序与IBM i一起使用。@JamesA,是的,我使用的是JTOpen。但是我不知道如何使用它来允许分页?好吧,实际的答案是你不知道,不是DB2fori版本6.1。但是,如果仍要输入该命令,请在输入其他db2*命令的同一命令行中执行,例如db2stop和db2start。