|
![]() | Deklarace handleru | ![]() | Deklarace objektů v SQL | Deklarace lokální tabulky | ![]() |
deklarace_kurzoru ::= DECLARE jméno [ INSENSITIVE | SENSITIVE ] [ SCROLL ] CURSOR
FOR specifikace_kurzoru;
specifikace_kurzoru ::= { dotazový_výraz | TABLE jméno_tabulky }
[ FOR { READ ONLY | UPDATE [ OF sloupec {, sloupec }… ] ] }
Touto deklarací se deklaruje kurzor, který lze otevřít příkazem OPEN, posouvat se a číst z něj řádky příkazem FETCH nebo jej používat v příkazech UPDATE CURRENT OF a DELETE CURRENT OF, a uzavřít jej příkazem CLOSE.
Je-li uvedeno INSENSITIVE, pak změny v datech provedené prostřednictvím kurzoru se v databázi neprojeví. Kurzor bude pracovat s vlastní kopií tabulky obsahující odpověď na dotazový výraz, který se proto musí při otevření pomocí OPEN celý vyhodnotit. Je-li uvedeno SENSITIVE, pak se změny v datech provedené prostřednictvím kurzoru projevují v databázi (podle nastavení izolace transakcí), což je implicitní stav. SENSITIVE nesmí být uvedeno v deklaraci needitovatelného kurzoru.
Specifikace SCROLL požaduje přístup k datům v kurzoru v libovolném pořadí. Tuto vlastnost mají ve 602SQL všechny kurzory a proto se SCROLL ignoruje.
Klauzule FOR UPDATE povoluje editaci dat (vylučuje s INSENSITIVE) a dá se použít pouze na editovatelné kurzory. Klauzule FOR READ ONLY zabraňuje v editaci dat a vkládání nebo rušení záznamů pomocí tohoto kurzoru bez ohledu na senzitivitu (tyto situace se poznají již při kompilaci).
Odchylky od Intermediate level směrem k Full level nebo k SQL 3
Příklad použití:
DECLARE cur CURSOR FOR
SELECT Firmy.adresa, CAST (SUM(Objednavky.objed) AS INT)
FROM Firmy, Objednavky
WHERE Objednavky.firma=Firmy.firma
GROUP BY Firmy.firma
FOR READ ONLY;
![]() | Deklarace handleru | ![]() | Deklarace objektů v SQL | Deklarace lokální tabulky | ![]() |