602SQL-Úplná dokumentace Index  

Deklarace kurzoru (SQL)

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;