DB2 с использованием LIMIT и OFFSET
Я занимаюсь разработкой веб-службы Java, позволяющей выполнять подкачку страниц при получении большого набора данных из базы данных DB2 на IBM Mid Range Machine (AS400).
Например; если в наборе данных 10000 записей, я хочу получать их по 1000 блоков за раз.
Я нашел эту статью, которая объясняет, что я могу использовать LIMIT и OFFSET. Но мне нужно установить DB2_COMPATIBILITY_VECTOR
переменная к MYS
,
Теперь я гуглил и увидел, что вы можете использовать db2set
установить эту переменную. Но я не смог выяснить, куда вводить эту команду?
Я занимаюсь разработкой на машине с Windows, и у меня установлен iSeries, и у меня есть доступ к IBM Mid Range Machine через эмулятор iSeries 5250.
Я знаю, что это настоящий вопрос, но как мне измениться? DB2_COMPATIBILITY_VECTOR
переменная к MYS
?
2 ответа
DB2 для Linux Unix Windows (LUW) и DB2 for iSeries - это разные продукты. Скорее всего, DB2 для iSeries не поддерживает DB2_COMPATIBILITY_VECTOR. Я не могу найти упоминание об этом в Информационном центре iSeries.
Вместо LIMIT вы можете использовать предложение FETCH FIRST 10 ROWS ONLY.
Вместо LIMIT и OFFSET вы можете использовать подвыбор с функцией olap ROW_NUMBER. Что-то вроде этого:
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, обычные современные страницы с 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