Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [oracle] limit

    Come posso prendere ad esempio in un database oracle le righe che vanno dalla 3 alla 15?

    Limit 3,12 non va!

    Aiuto!

  2. #2

    Limit, offset in oracle

    LIMIT e OFFSET non sono riconosciute da Oracle.

    Per simulare una limit si può fare così:
    SELECT * FROM table WHERE ROWNUM <= 10

    Il che ritorna le prime 10 righe (poiché ROWNUM è 1-based)

    Notiamo però che per simulare un OFFSET,LIMIT ci sono dei problemi: infatti
    SELECT * FROM tabella WHERE ROWNUM BETWEEN 11 AND 20
    non funziona

    Possiamo però simulare una OFFSET,LIMIT scrivendo la query in questa forma
    select * from (
    select rownum as rn, tabella.* from tabella where rownum <= 20
    ) WHERE RN > 10

    Va però detto che se usiamo una clausola ORDER BY, oracle effettua l'ordinamento DOPO aver limitato i valori, il che solitamente non è ciò che vogliamo. Quindi la seguente:
    select * from (
    select rownum as rn, tabella.* from tabella where rownum <= 20 order by campo
    ) WHERE RN > 10
    non dà il risultato probabilmente atteso

    Una soluzione a questo problema può essere ottenuta con il seguente workaround:
    select * from (
    select rownum as rn2, insel.* from (
    select rownum as rn, tabella.* from tabella order by campo
    ) insel
    ) WHERE RN2 between 11 and 20

    Quest'ultima query simula OFFSET, LIMIT in oracle e mantiene l'ordinamento voluto.
    Il risultato è corretto, ma non so se ci sono metodi più efficienti per ottenere lo stesso.

    Ciao
    Demiurgo http://paolo.demiurgo.it
    --
    Paolo Di Pierdomenico
    blog: http://paolo.demiurgo.it
    Demiurgo Electronic Music Project
    http://www.demiurgo.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.