Kurzory – definice, klasifikace, použití kurzorů.
Thursday, May 30, 2013
8:15 AM
Definice
Kurzor je abstraktní datový typ umožňující procházet záznamy vybrané dotazem, který je s kurzorem spojen.
Prostředek pro získání informace z databáze a předání do programu v jazyce PL/SQL
SELECT co vrací více řádků, přes kurzor je možné výsledky procházet
Klasifikace
explicitní kurzor
nutno deklarovat, otevřít, načíst data a uzavřít DECLARE CURSOR <jméno kurzoru>IS <dotaz>; OPEN <jméno kurzoru>; FETCH <jméno kurzoru>INTO <jméno proměnné1>, <jméno proměnné2>, …; CLOSE <jméno kurzoru>;
implicitní kurzor
je deklarován a prováděn přímo v těle programu
v tomto typu kurzoru jsou povoleny pouze příkazy SQL, které vrací jednotlivé řádky nebo nevrací žádné řádky,
příkazy SELECT, UPDATE, INSERT a DELETE obsahují implicitní kurzory
musí se shodovat datové typy sloupců a proměnných
implicitní kurzor SELECT musí vracet pouze jeden řádek (SELECT INTO !) SELECT <jméno sloupce 1>, <jméno sloupce 2> INTO <jméno proměnné 1>, <jméno proměnné 2> FROM ... ;
Atributy kurzoru
cursor%FOUND obsahuje záznamy?
cursor%NOTFOUND neobsahuje záznamy?
cursor%ISOPEN je otevřený?
cursor%ROWCOUNT dosud zpracováno řádků
Použití kurzorů
Když je potřeba iterovat přes hromadu položek a pro každou položku něco provést (tedy ne pro všechny najednou, ale pro každou zvlášť)
v triggerech
v uložených procedurách
příklad:
DECLARE
  tmp osoby%ROWTYPE;
  CURSOR plist IS SELECT * FROM osoby;
BEGIN 
  OPEN plist; 
  LOOP
    FETCH plist INTO tmp;
    EXIT WHEN plist%NOTFOUND;
    dbms_output.put_line(plist%ROWCOUNT||'. '||tmp.jmeno||' '||tmp.prijmeni);
  END LOOP; 
  CLOSE plist;
END; 
Příklad implicitního kurzoru:
DECLARE
Sum NUMBER;
BEGIN
  SELECT SUM(salary) INTO Sum FROM Employee
END;
Vloženo z <[link]> 
Dále např. automatické číslování v SŘBD Oracle (Autoinkrement)
From <[link]> 
Jaká konstrukce se používá pro zpracování víceřádkových SELECT v PL/SQL a jaké jsou její dva typy? 
Používá se konstrukce CURSOR – předává programu PL/SQL info z databáze
Explicitní kurzor - nutno deklarovat, otevřít, načíst data a uzavřít (vše dělá programátor)
Implicitní kurzor - je automaticky deklarován Oraclem a prováděn přímo v těle programu při použití SQL dotazu. Implicitní je proto, že ho uživatel nemusí nijak deklarovat. Pokud např. Select vrací více řádku, se kterými chceme dále pracovat, je nutné použít explicitní kurzor.
From <[link]> 