Newsgroup: it.comp.software.database
Titolo: domanda oracle e limit

domanda :
ho una query normale con sql
select * from table where a=2 limit 0,5
in pratica prendo l'intervallo solo i primi 5 risultati
oppure
select * from table where a=2 limit 2,5
in pratica prendo l'intervallo solo 5 risultati dal secondo in poi (da 2 a 
7)
PECCATO CHE ORACLE NON ABBIA IL LIMIT :-((
o provato questo
select * from table  where a=2  and NUMROW > 0 AND NUMROW<5
e funziona mentre
select * from table  where a=2  and NUMROW > 2 AND NUMROW<5
nn mi da nessun risultato.
E non capisco per quale motivo.
Avete dei suggerimenti?
Grazie mille a tutti!
D. 

 --Peter Gutmann 

   -- 
wbog...@gte.net

Ottimizzato per le performance:
select *
	from ( select a.*,rownum rn
		from (select * from tuatabella ordered by quellochevuoi)
		where rownum<=40)
	where rn>30;
Come sempre rubato a Thomas Kyte.
-- 
Fabrizio Magni
fabrizi...@mycontinent.com
replace mycontinent with europe

 ha scritto nel messaggio 
news:42d67eeb$0$72868$892e...@authen.white.readfreenews.net...

ho provato la tua sintassi in questo modo
$stmt2 = ociparse($c1,'select * from ( select SKU.*,rownum rn from (select * 
from SKU ordered by SKU.ID_PTYPE) where rownum<=10) where rn>5');
ma nn pare funzionare.
S.


Riprova con:
$stmt2 = ociparse($c1,'select * from ( select SKU.*,rownum rn from 
(select *
from SKU order by SKU.ID_PTYPE) SKU where rownum<=10) where rn>5');
Dai sempre un'occhiata al codice che copi e incolli!


 ha scritto nel messaggio 
news:42d68479$0$72868$892e...@authen.white.readfreenews.net...


 
Qui l'ho testato su di una tabella e funziona.
Prova a fare la select direttamente sul DB e guarda qual'e' l'errore 
(magari postalo).
Ciao


 
Tanto per mostrare che funziona:
   1  select * from ( select a.username,rownum rn from (select *
   2* from v$session order by machine) a where rownum<=10) where rn>5
SQL> /
USERNAME                               RN
------------------------------ ----------
PORTALAPPL_ADM                          6
PORTALAPPL_ADM                          7
PORTALAPPL_ADM                          8
PORTALAPPL_ADM                          9
PORTALAPPL_ADM                         10


 ha scritto nel messaggio 
news:42d6884d$0$72868$892e...@authen.white.readfreenews.net...


 OCIStmtExecute: ORA-00907: missing right parenthesis
Ti riconsiglio eseguire la query direttamente.
In ogni caso e' possibile che l'eeore sia dovuto alla mancanza del ; 
prima dell'ultimo apice:
$stmt2 = ociparse($c1,'select * from ( select LKBUILD.SKU.*,rownum rn 
from (select * from LKBUILD.SKU order by LKBUILD.SKU.ID_PTYPE) 
LKBUILD.SKU where rownum<=10) where rn>5;');
Per di piu' credo tu abbia frainteso l'uso dall'alias.
La query che hai modificato fuinziona solo grazie alla "gestione" dello 
scope.
$stmt2 = ociparse($c1,'select * from ( select LKBUILD.SKU.*,rownum rn
                                               ^^^^^^^^^^^
from (select * from LKBUILD.SKU order by LKBUILD.SKU.ID_PTYPE) 
LKBUILD.SKU where rownum<=10) where rn>5;');
^^^^^^^^^^^
I punti che ti ho sognato rappresentano alias e non il nome vero e 
proprio della tabella.
In ogni caso prova con l'aggiunta del punto e virgola ma soprattutto 
prova prima la query usando un semplice sqlplus e poi usala nella tua 
applicazione. ti rendera' piu' semplice il debugging.
Ora di tornarmene a casa.
Ciao


 ha scritto nel messaggio 
news:42d69828$0$81734$892e...@authen.white.readfreenews.net...


 Davide
Ni hao, Lelle.