sql >> Database >  >> RDS >> Oracle

gegevens ophalen met rownum in oracle

rownum is een pseudo-kolom die rijen telt in de resultaatset nadat de waar-clausule is toegepast.

  SELECT table_name
    FROM user_tables
    WHERE rownum > 2;
TABLE_NAME                     
------------------------------

0 rows selected

Deze query retourneert echter altijd nul rijen, ongeacht het aantal rijen in de tabel.

Om dit gedrag te verklaren, moeten we begrijpen hoe Oracle ROWNUM verwerkt. Bij het toewijzen van ROWNUM aan een rij, begint Oracle bij 1 en verhoogt alleen de waarde wanneer een rij is geselecteerd; dat wil zeggen, wanneer aan alle voorwaarden in de WHERE-clausule is voldaan. Aangezien onze voorwaarde vereist dat ROWNUM groter is dan 2, worden er geen rijen geselecteerd en wordt ROWNUM nooit hoger dan 1.

http://blog.lishman.com/2008/03/rownum.html

nog een stackoverflow-link

Bewerkt

deze paragraaf vind ik op oracle website die veel beter is

Testvoorwaarden voor ROWNUM-waarden groter dan een positief geheel getal zijn altijd onwaar. Deze zoekopdracht retourneert bijvoorbeeld geen rijen:

SELECT * FROM employees
    WHERE ROWNUM > 1;

De eerste opgehaalde rij krijgt een ROWNUM van 1 en maakt de voorwaarde onwaar. De tweede rij die moet worden opgehaald, is nu de eerste rij en krijgt ook een ROWNUM van 1 en maakt de voorwaarde onwaar. Alle rijen voldoen vervolgens niet aan de voorwaarde, dus er worden geen rijen geretourneerd.

U kunt ROWNUM ook gebruiken om unieke waarden toe te wijzen aan elke rij van een tabel, zoals in dit voorbeeld:



  1. DISTINCT tellen over meerdere kolommen

  2. MySQL-volgorde op twee waarden

  3. Vreemd gedrag van groeperen door in Query die moet worden geoptimaliseerd

  4. Sessiegegevens van gebruiker opslaan