Jak vybrat 100000. radek
Jan Serak
sherry na pikebo.cz
Úterý Květen 16 14:05:12 CEST 2000
Milan Sorm wrote:
>
> Chtel bych vybrat 100000. radek. Zkousel jsem
>
> select * from tabulka where rownum = 100000
>
> ale to nevybralo nic. nemate nekdo nejaky napad ?
>
> jde o Oracle.
Takhle to nepujde. Predpokladejme, ze by to vybralo jeden radek,
pak podle definice rownum by to byl rownum=1 a
rownum=1 and rownum=100000
je samozrejme kontradikce. Napada me jedine vylit to poradi do
pomocne tabulky, treba:
create table pomocna as select rownum poradi,<dalsi potrebne sloupecky>
from tabulka;
a pak by sel:
select * from pomocna where poradi=100000;
Elegantni je, pokud tabulka "tabulka" ma primarni klic, tak do pomocne dat
pouze rownum a sloupecky primarniho klice a nad obemi vystavet view:
create view pohled as select <sloupecky tabulky "tabulka">,poradi
from tabulka t,pomocna p
where t.pk1=p.pk1 and ... -- vsechny sloupecky primarniho klice
A aby bylo ucineno eleganci za dost, tak nad tabulkou "tabulka" dodelat jeste
insertovaci trigger, ktery by vkladal potrebny zaznam i do pomocne tabulky.
Ale pokud by to mela byt jednoucelova zalezitost, tak by melo stacit:
BEGIN
FOR i in (select rownum,... from...) LOOP
IF i.rownum=<pozadovane poradi> THEN
-- uklid potrebnych hodnot
EXIT; -- vyskoci z LOOP
END IF;
END LOOP;
-- dalsi cinnost
END;
Dalsi reseni je funkce, ktera dostane na vstup retezec s query a cislo
(pozadovane
poradi zaznamu), pres dbms_sql vyrobi a otevre kurzor, provede prislusny pocet
fetchu a vrati hodnoty.
Jan Serak
Další informace o konferenci Test