Oracle
 sql >> Baza danych >  >> RDS >> Oracle

sql (oracle), aby wybrać pierwsze 10 rekordów, potem następne 10 i tak dalej

Jest na to tylko dość zawiły sposób, co jest prawdziwym bólem w przypadku Oracle. Powinni po prostu zaimplementować klauzulę LIMIT/OFFSET...

Numer wiersza zostaje przypisany po wiersz został wybrany przez klauzulę WHERE, tak że rownum musi zawsze zaczynać się od 1. where rownum > x zawsze oceni się na fałsz.

Ponadto rownum zostaje przypisane przed zakończeniem sortowania , więc numer rzędu nie będzie w tej samej kolejności co twoje zamówienie przez mówi.

Możesz obejść oba problemy za pomocą podwyboru:

 select a,b,c, rn from 
    ( select a,b,c, rownum rn from 
         ( select a,b,c from the_table where x = ? order by c)
      where rownum < Y)
  where rn > X

Jeśli nie musisz sortować (ale tylko wtedy), możesz uprościć

 select a,b,c, rn from
     ( select a,b,c, rownum rn from the_table where rownum < Y )
   where rn > X


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC PreparedStatement i parametry (?) w wybranym zapytaniu

  2. Czy pula połączeń jest koniecznością w ODP.NET?

  3. Składnia do niestandardowej leniwej oceny / krótkiego obwodu parametrów funkcji

  4. Kolekcje Oracle PL/SQL — dodawanie elementów do istniejącej tabeli

  5. Jak zbiorczo wstawić dane z kursora ref do tabeli tymczasowej w PL/SQL?