Мы должны создать процесс в Spring Framework, который читает таблицу DB2 по блокам. Однако в этой таблице нет столбца с уникальным идентификатором, который мы можем использовать в качестве курсора, поэтому во втором блоке мы не знаем, с какой точки мы должны читать. В таблице есть такие столбцы:
BOOK_ID SOLD_AT QUANTITY
Первый — внешний ключ к модели книги, второй — дата продажи книги, а третий — количество проданных книг.
Можно ли выполнить SELECT упорядочение по rowId db2? К сожалению, это устаревший код, поэтому мы не можем создать дополнительный столбец в файле db2.
Заранее спасибо.
Попробуй это:
select hex(rowid) rowid, t.name, t.creator
from (
select t.*, rid_bit(t) rowid
from sysibm.systables t
) t
order by rowid
fetch first 10 row only;
Значение rid_bit(table-designator
) для строки может измениться при физическом перемещении строки (реорганизация, например, старая строка удаляется, новая строка вставляется в то же физическое место и т. д.)
Функция возвращает значение varchar for bit data
— двоичную строку. Если вы умеете корректно работать с такими данными - используйте их без hex. Вместо этого вы можете использовать функцию rid()
(она возвращает bigint
), если ваша база данных не разделена на разделы (DPF). Сортировка огромной таблицы может быть не очень хорошей идеей, но правильной альтернативы этому нет...
Большое спасибо за ваш ответ, тогда я мог бы выбрать по rowId больше, чем известный rowid? Должен ли я использовать rowid или hex (rowid)? С точки зрения производительности, в таблице с большим количеством записей может возникнуть проблема с использованием такого запроса? Большое спасибо