Сортировка базы данных Oracle нестабильна;способ вставки данных не имеет гарантированного отношения к способу возврата данных.
(Обратите внимание, что стабильность сортировки означает, что исходный порядок сохраняется при наличии связей взапрошенный порядок сортировки . Вопрос о том, имеет ли Oracle стабильную сортировку, немного отличается от вопроса о том, будет ли Oracle возвращать строки в указанном порядке?)
Много раз, когда Oracle сортирует выглядит стабильным, но легко создавать тестовые примеры, демонстрирующие нестабильную сортировку. Если нам нужно гарантированное поведение сортировки, мы должны полностью указать выражения в предложении ORDER BY
.
Например, в приведенном ниже тривиальном тестовом примере вставлены значения для столбца B
в порядке 1, 2, 3. Нопри сортировке по A
он возвращал значения B
в порядке 1,3,2.
--drop table table1;
create table table1(a number, b number);
insert into table1 select 1,1 from dual;
insert into table1 select 1,2 from dual;
insert into table1 select 1,3 from dual;
select * from table1 order by a;
A B
- -
1 1
1 3
1 2
Точные алгоритмы не документированы, поэтому такое поведение не может быть легко воспроизведено. Но если вы поэкспериментируете с достаточной сортировкой, вы легко найдете примеры нестабильной сортировки.