sql >> Databasteknik >  >> RDS >> Oracle

hämta data med hjälp av rownum i oracle

rownum är en pseudokolumn som räknar rader i resultatuppsättningen efter where-satsen har tillämpats.

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

0 rows selected

Den här frågan returnerar dock alltid noll rader, oavsett antalet rader i tabellen.

För att förklara detta beteende måste vi förstå hur Oracle bearbetar ROWNUM. När du tilldelar ROWNUM till en rad, börjar Oracle med 1 och ökar endast värdet när en rad väljs; det vill säga när alla villkor i WHERE-klausulen är uppfyllda. Eftersom vårt villkor kräver att ROWNUM är större än 2, väljs inga rader och ROWNUM ökas aldrig mer än 1.

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

en annan stackoverflow-länk

Redigerad

det här stycket hittar jag på oracle webbplats som är mycket bättre

Villkor som testar för ROWNUM-värden större än ett positivt heltal är alltid falska. Till exempel returnerar den här frågan inga rader:

SELECT * FROM employees
    WHERE ROWNUM > 1;

Den första raden som hämtas tilldelas ROWNUM 1 och gör villkoret falskt. Den andra raden som ska hämtas är nu den första raden och är också tilldelad ett ROWNUM på 1 och gör villkoret falskt. Alla rader uppfyller inte villkoret, så inga rader returneras.

Du kan också använda ROWNUM för att tilldela unika värden till varje rad i en tabell, som i det här exemplet:



  1. Ta bort onödig Woocommerce-bildmeta

  2. Välj frågans ordning fungerar inte i det förberedda uttalandet

  3. Hur man infogar en ny rad i PostgreSQL

  4. Långsam fråga i Java av JDBC men inte i andra system (TOAD)