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

Смотрите эту статью для деталей...

Другие вопросы по тегам