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