Kurzor v Oracle

 

Popis


Príkaz jazyka SQL
Oracle implementuje z hľadiska rolovania iba dopredný (jednosmerný) kurzor týchto dvoch druhov:
  • Excplicitný – pre tento typ je nutné pre prácu s kurzorom zadať deklaračný príkaz a otvoriť kurzor; nasleduje načítanie dát a zatvorenie kurzoru
  • Implicitný – kurzor sa deklaruje a vykonáva priamo v tele programu. Pre implicitný kurzor sú povolené iba tie príkazy, ktoré vracajú jeden alebo žiadne riadky. (SELECT, INSERT, UPDATE, DELETE)


Explicitné kurzory


Základná syntax pre explicitný kurzor:
DECLARE CURSOR <cursorname> IS <query>

Otvorenie
OPEN cursorname

Čítanie z kurzora
FETCH <cursorname> INTO Variable1, Variable2,...

Zatvorenie kurzora
CLOSE <cursorname>


Príklad pre explicitný kurzor:
DECLARE
    NAME VARCHAR2(10);
    CURSOR cur_Student IS SELECT Name FROM Student;
BEGIN
  OPEN cur_Student;
FETCH cur_Student INTO NAME;
FETCH cur_Student INTO NAME;
CLOSE cur_Student
END;


Príklad použitia kurzora v cykle:
DECLARE
    NAME VARCHAR (10);
    CURSOR cur_Student IS
       SELECT ID, Name FROM Student;
BEGIN
   FOR row IN cur_Student LOOP
      IF row.Name = ‘JANO’ THEN
          UPDATE Student SET Name = ‘JANKO’
            WHERE ID = row.ID;
       END IF;
   END LOOP;
END;


Poznámka: V cykle sú implicitne ovládané príkazy OPEN, FETCH, CLOSE

Implicitné kurzory


Syntax pre implicitný kurzor je:
SELECT col1, col2, ... INTO var1, var2,...
FROM ...

Dátové typy stĺpca a premennej musia byť zhodné svojím typom ako aj dĺžkou.
Implicitný kurzor SELECT musí vracať iba jeden riadok. Ak vracia viac riadkov, musí sa použiť explicitný kurzor.

Príklad implicitného kurzora:
DECLARE
Sum NUMBER;
BEGIN
  SELECT SUM(salary) INTO Sum FROM Employee
END;


Atribúty kurzora


Informácia o stave kurzora sa uchováva v štyroch atribútoch. Každý atribút sa priraďuje k danému kurzoru pomocou mena kurzora a mena atribútu.

cursorname%FOUND
Tento atribút je true ak sa načítal riadok pri poslednom príkaze FETCH, inak má hodnotu false
cursorname%NOTFOUND
Opak atribútu %FOUND.
cursorname%ISOPEN
Atribút má hodnotu true ak kurzor bol otvorený, inak false
cursorname%ROWCOUNT
Atribút nesie informáciu o počte doposiaľ načítaných riadkov. V príkaze update má atribút SQL%ROWCOUNT hodnotu rovnú počtu aktualizovaných riadkov.



Príklad použitia atribútov:

DECLARE
    NAME VARCHAR(10);
    CURSOR cur_Student IS SELECT Name FROM Student;
BEGIN
  OPEN cur_Student;
FETCH cur_Student INTO NAME;
IF cur_Student%FOUND THEN
   FETCH cur_Student INTO NAME;
    END IF;
CLOSE cur_Student
END;


Pozri aj


SQL kurzor



vytlačiť článok  hľadať súvisiace články 



Chat ku článku

Vyhľadávanie na stránke
Reklama
Náhodný obrázok
náhodný obrázok
Kontakty

Martin Kasman, M Software
Smreková 3095/23
Email: martin@kasman.sk

Telefón: 0908 270 294