existuje program na ucetnictvi?

Karel Zak zakkr na zf.jcu.cz
Čtvrtek Duben 5 12:45:01 CEST 2001


On Thu, Apr 05, 2001 at 11:37:08AM +0200, Leos Urban wrote:
> > > To asi nebude nejlepší řešení, co takhle např. SELECT * FROM sklad LIMIT
> a,
> > > b a interakce s ovladanim. Ten dotaz bude samozrejme slozitejsi, pro
> moznost
> > > dynamickeho skakani po položkách začínajících např na skříň...
> > > Jaromir
> 
> >  hmm.. a co vec zvana CURSOR?
> 
> Kurzory ctou data PO deklaraci SELECT prikazu, tj. tento problem neresi.
> 
> PREPARE prikaz FROM "SELECT * FROM SKLADPOL WHERE nazev like 'Skrin%'"
> DECLARE A CURSOR FOR prikaz
> OPEN A
> i = 1
> while (1)
>  {
>    FETCH A INTO neco[i++]
>    if (sqlcode<0 || sqlcode==NOTFOUND) break;
>  }
> CLOSE A
> FREE A
> ... zobrazeni dat z pole neco[]
> 
> Jde samozrejme udelat to tak, ze cyklus nacte vety od,do - ale tim se stejne
> na klienta
> poslou vsechny vybrane zaznamy a on z nich zobrazi jen neco. Takto se to
> dela
> pri programovani WEB aplikaci, neumi-li server jiz zmineny rozsah zadat v
> SELECTu.

 A svet se smrsknul na Oracle? (nebo ci je to syntax?)

 Priznam se bez muceni, ze uz presne nevim co mel ten skladnik delat podle
puvodniho zadani (smazal jsem si ten mail), ale pokud jde o to vratit jen
urcitou radku z nejake query tak neni pravda, ze se pri pouziti CURSORu
se posila na klienta vsechno. Napr. v PostgreSQL:

DECLARE xcur CURSOR FOR select * from aaa;
MOVE 2 IN xcur;
FETCH FORWARD 5 FROM xcur;

udela presne to same jako:

SELECT * FROM aaa LIMIT 5 OFFSET 2; 	(u mySQL LIMIT 5,2) 

 Ten hlavni rozdil je pokud pouzijete SELECT ..LIMIT na stejnou tabulku
a se stejnym WHERE vicekrat a jen menite LIMIT/OFFSET tak naprosto zbytecne
zatezujete server nekolika dotazama zatimco CURSOR vam umoznuje udelat jeden 
dotaz a pak se v nem pohybobat. Nemluve o tom, ze LIMIT/OFFSET jsou veci,
ktere se vyhodnocuji jako posledni -- tedy pokud v dotazu mate ORDER BY tak
az potom se z toho vybere vyrez. Ma-li tabulka milion radek tak poslat tam
nekolikrat LIMIT bude urcite pomalejsi nez tam jednou nadefinovat CURSOR
a pak se v tech datech pohybovat.

 LIMIT ma vyznam je pokud se ptate vicekrat s ruznym WHERE (apod.)

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Linux