Czy istnieje sposób, aby Oraclezapytanie zachowywało się tak, jakby zawierało MySQL limitklauzulę?
W MySQLmogę 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 rownumpseudo-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.