• aaa

    Poznávačka krás Maďarska - toulání po severu 

  • CAT700

    Non-stop adventure závod přes Katalánsko - z Pyrenejí až k moři

  • Toulání Šumavou
    Toulání Šumavou

    Extrémní non-stop MTB závod

  • 1000 miles
    1000 miles

    Non-stop extrémní adventure závod napříč Československem by Jan Kopka

  • Bohemia Divide 2019

    Non-stop bike packing závod 700km dlouhý z nejjižnějšího do nejsevernějšího místa ČR 

A A A

Kurzory slouží pro sekvenční zpracování vybraných dat. Do dočasné tabulky se načtou data a nad nimi se provádí daná sekvence příkazů (uzavřených do bloku BEGIN ... END)

Pro lepší představu uvedu příklad použití:
V informačním systému potřebuji spočítat marži nad fakturami. Faktura obsahuje položky, na kterých je uvedena prodejní cena. Abych zjistil marži položky je třeba provést nad položkami několik výpočtů. Řešení: Kurzor načte do dočasné tabulky všechny položky označených faktur a pak je postupně prochází a nad každým provede sekvenci výpočtů . Po provedení výpočtů nad jedním řádkem se se přesune na řádek další.

Kurzor prochází postupně jednotlivé řádky výběru (použitím příkazu FETCH NEXT viz.příklad). Můžeme ale použít i tyto příkazy:
FETCH PRIOR (předchozí řádek)
FETCH LAST (poslední řádek)
FETCH FIRST (první řádek)

-- proměnné
DECLARE @IDPolozky int, @ProdejniCena numeric(19,2)  
 
-- deklarace kurzoru
DECLARE cur_vypocet CURSOR FOR					

-- data nad kterými bude kursor dělat výpočty
SELECT ID, Cena FROM TabPolozkyFaktur WHERE CisloFaktury = 2222
 
-- otevření kursoru
OPEN cur_vypocet
 
-- skok na první řádek a načtení dat do proměnných
FETCH NEXT FROM cur_vypocet INTO @IDPolozky, @ProdejniCena	
 
-- pokud je úspěšné načtení proměnných (status 0) tak proveď příkazy
WHILE @@FETCH_STATUS=0						
 
  BEGIN
    -- příkazy které provádíme
    -- skok na další řádek a načtení dat do proměnných 
    FETCH NEXT FROM cur_vypocet INTO @IDPolozky, @ProdejniCena
  END   

-- uzavření kurzoru 
CLOSE cur_vypocet 

-- uvolnění z paměti 
DEALLOCATE cur_vypocet

 

Search