Oracle 9.2i- strankovanie selectu

Honza Pazdziora adelton na informatics.muni.cz
Pátek Červenec 11 17:04:17 CEST 2003


On Fri, Jul 11, 2003 at 04:34:52PM +0200, Kluvanek Martin wrote:

> Mam taky mozno blby dotaz ale zatial sme s tym neboli schopni pohnut.
> Potrebujem spravit SELECT ktoreho vysledok bude utriedeny podla nejakeho 
> atributu ale odpoved potrebujem nastrankovat, cize vratit napriklad 
> riadky 50..70.
> Nasi experimentatori tvrdia, ze to ide nastrankovat len podla povodneho 
> neutriedeneho rownum a az potom utriedit, ale to mi triedi len obsah 1 
> stranky a nie to co chcem ja (strankovat utriedenu tabulku).
> 
> Takto je to blbo:
> $query = "select * from (
>   select rownum limit, SEZNAM_SIGNALU.*, (
>     select count(*) from MU_MODUL_VSTUPY where
>     MU_MODUL_VSTUPY.SIGNAL=SEZNAM_SIGNALU.SIGNAL)
>   as POCET_VSTUPU from SEZNAM_SIGNALU order by $OrderBy )
> where limit between $ListFrom and $ListTo";

1. Nejdrive si musite poskladat vystup, cili order by.
2. Pak si musite rownum z takto vraceneho subselectu nejak pojmenovat.
3. A pak muzete nad takto pojmenovanym sloupcem delat test a omezeni.

select * from vstupy ;
ID,NAME,VALUE
'1','jezek','20'
'2','krtek','20'
'3','krtek','30'
'4','sova','33'
'15','sova','3'
'16','zirafa','12'
[6 rows of 3 fields returned]

select * from (
	select a.*, rownum limit from (
		select * from vstupy order by value
		) a
	)
where limit between 2 and 3 ;
ID,NAME,VALUE,LIMIT
'16','zirafa','12','2'
'1','jezek','20','3'
[2 rows of 4 fields returned]

select * from (
	select a.*, rownum limit from (
		select * from vstupy order by value desc -- tady je desc
		) a
	)
where limit between 2 and 3 ;
ID,NAME,VALUE,LIMIT
'3','krtek','30','2'
'1','jezek','20','3'
[2 rows of 4 fields returned]

Uprava pro Vami pozadovanou datovou strukturu je ponechana jako domaci
cviceni. Pro sirsi obecenstvo: ano, order by v subselectech funguje
az od 8i.

Nicmene: nepouzivejte tohle pro data, kde ten nejvnitrnejsi select
vrati nejake velke mnozstvi dat a bude se delat porad dokola.
V takovem pripade je vyrazne lepsi si do pomozne tabulky spocitat
a ulozit poradi jednotlivych zaznamu a pak jet joinem podle teto
tabulky, pres indexy.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Databases