Czy istnieje sposób, aby Oracle
zapytanie zachowywało się tak, jakby zawierało MySQL limit
klauzulę?
W MySQL
mogę to zrobić:
select *
from sometable
order by name
limit 20,10
aby dostać 21 do 30 rzędów (pomiń pierwsze 20, podaj kolejne 10). Wiersze są wybierane po order by
, więc tak naprawdę zaczyna się od 20. nazwy alfabetycznie.
W Oracle
, jedyną rzeczą, ludzie wspomnieć, jest rownum
pseudo-kolumny, ale to jest oceniane przed order by
, która oznacza:
select *
from sometable
where rownum <= 10
order by name
zwróci losowy zestaw dziesięciu wierszy uporządkowanych według nazwy, co zwykle nie jest tym, czego chcę. Nie pozwala również na określenie przesunięcia.
ORDER BY
. Na tym właśnie polega sens zamawiania. Jeśli podstawowe dane ulegają zmianie, a zestaw wyników zmienia się z tego powodu, to dlaczego nie pokazać użytkownikowi zaktualizowanych wyników zamiast nieaktualnych informacji? Ponadto zarządzanie państwem jest plagą, której należy w jak największym stopniu unikać. Jest stałym źródłem komplikacji i błędów; dlatego funkcjonalność staje się tak popularna. A kiedy miałbyś wiedzieć, że wygasa cały zestaw wyników w pamięci? W sieci nie możesz wiedzieć, kiedy użytkownik odejdzie.