602SQL-Úplná dokumentace Index  

Příkaz FETCH (SQL)

Příkaz_FETCH ::= FETCH [ [ směr ] FROM ] jméno_kurzoru [ INTO cíl [ {, cíl }…] ];
směr ::= NEXT | PRIOR | FIRST | LAST | ABSOLUTE výraz | RELATIVE výraz

Příkaz FETCH nastaví zadaný kurzor na řádek určený klauzulí směr a zapíše hodnoty jednotlivých sloupců tohoto řádku po řadě do uvedených cílů. Nastavení kurzoru na specifikovaný řádek ovlivní následující příkazy DELETE CURRENT OF a UPDATE CURRENT OF.

Jméno_kurzoru musí být buď deklarováno v deklaraci kurzoru nebo musí označovat dotaz patřící do aplikace a uložený v databázi.

Není-li uveden směr, použije se směr NEXT. Směry mají tento význam:

Výraz musí být celočíselného typu.

Příkaz FETCH bez uvedení cíle pouze změní pozici v kurzoru.

Cílem musí být proměnná, jejíž typ umožňuje přiřazení hodnoty odpovídajícího sloupce kurzoru. Počet cílů musí být stejný jako počet sloupců kurzoru.

Pokud zadaný kurzor není otevřen nebo je již zavřen, nastane chybový sqlstate 24000 (SQ_INVALID_CURSOR_STATE). Není-li kurzor deklarován nebo neexistuje-li v aplikaci, nastane sqlstate 34000 (SQ_INVALID_CURSOR_NAME). Pokud zadaný řádek neexistuje, nastane sqlstate 02000 (NOT_FOUND). Pokud nelze provést přiřazení mezi sloupcem a cílem z důvodu natolik odlišných typů, že automatická konverze selže, nastane sqlstate W0141 (CANNOT_CONVERT_DATA).


Příklad použití:

Máme-li pevný dotaz používaný na více místech, není třeba jej pokaždé deklarovat. Víme, že dotaz má vždy jeden záznam a proto není třeba uvažovat o chybě NOT FOUND.

DECLARE pocetrec INT;
DECLARE sumcastka REAL;
...
OPEN Archiv_sum;          // pevný kurzor uložený v aplikaci
 FETCH FIRST FROM Archiv_sum INTO pocetrec, sumcastka;
CLOSE Archiv_sum; 

Dotaz Archiv_sum je definován takto:

SELECT COUNT(*),SUM(cena)
FROM Archiv