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