Я наблюдал странное поведение с ROWNUM в Oracle со статическими таблицами. Я пытаюсь пагинации с запросом, как показано нижеПоведение rownum в Oracle
select * from (
select the_data,rownum as seqn from the_table
) where seqn <= somenumber and seqn >= othernumber
Однако, когда я выполнить запрос несколько раз я замечаю, что значение ROWNUM возвращается не является уникальным для строки, т.е. если строка появляется в ROWNUM 25 впервые он появляется в ROWNUM 125 для второго исполнения
Эта проблема не появляется, если я делаю заказ, как,
select * from (
select the_data,rownum as seqn from the_table order by column3
) where seqn <= somenumber and seqn >= othernumber
Однако заказ по снижает производительность. Это нормально или есть какой-либо другой способ повысить производительность.
Это FAQ. Вы получите ответ в вопросе, который я обозначил как дубликат. В вашем первом запросе в подзапросе нет ** ORDER BY **, поэтому нет ** гарантии ** порядка упорядоченных строк. –
@Lalit Kumar B Но для статической таблицы следует, чтобы rownum не был таким же каждый раз, когда вы запускали запрос –
** NO **, никогда. «ROWNUM» - псевдо-столбец, который присваивается строке после прохождения фазы предиката. Строки не сохраняются в каком-либо порядке, ни они не выбираются в любом порядке. Чтобы обеспечить заказ, вы ДОЛЖНЫ всегда указывать ** ORDER BY **. –