Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks Runtime 18.1 a novější
Načte další řádek z otevřeného kurzoru do proměnných.
Příkaz FETCH načte vždy jeden řádek ze sady výsledků kurzoru a přiřadí hodnoty sloupců zadaným proměnným. Pokud nejsou k dispozici žádné další řádky, je vyvolána podmínka CURSOR_NO_MORE_ROWS (SQLSTATE '02000').
Tento příkaz lze použít pouze ve složeném příkazu .
Poznámka:
Chyby FETCHpřetypování (například DATATYPE_MISMATCH) mohou být vyvolány při přiřazování hodnot sloupců proměnným. K chybám za běhu, jako je DIVIDE_BY_ZERO , může také dojít a nemusí souviset s načteným řádkem kvůli sadě orientované povaze zpracování SQL.
Syntaxe
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Parametry
-
Název otevřeného kurzoru. Kurzor může být volitelně kvalifikovaný pomocí popisku složeného příkazu (např
outer_label.my_cursor. ). NEXT FROMVolitelná klíčová slova
NEXTaFROMjsou syntaktický cukr a neovlivňují chování. Podporuje se pouze přesměrování načítání.-
Místní proměnná nebo proměnná relace pro příjem hodnot sloupců. Počet proměnných musí odpovídat počtu sloupců v sadě výsledků kurzoru s jednou výjimkou; jinak ASSIGNMENT_ARITY_MISMATCH je vyvolána:
- Pokud je zadána přesně jedna proměnná a jedná se o
STRUCTtyp a kurzor vrátí více sloupců, hodnoty sloupců se přiřadí k polím struktury podle pozice.
Datové typy sloupců musí být kompatibilní s cílovými proměnnými (nebo poli struktury) podle pravidel přiřazení úložiště.
- Pokud je zadána přesně jedna proměnná a jedná se o
Poznámky
Pokud nejsou k dispozici žádné další řádky, FETCH vyvolá CURSOR_NO_MORE_ROWS podmínku (SQLSTATE '02000'). Jedná se o podmínku dokončení, ne o výjimku: neukončí provádění. Obslužná rutina NOT FOUND ji CURSOR_NO_MORE_ROWS může zpracovat, NOT FOUND zachytí všechny podmínky SQLSTATE '02xxx' .
Načítání z kurzoru, který není otevřený , vyvolá CURSOR_NOT_OPEN. Kompatibilita typů se řídí pravidly přiřazení úložiště: nekompatibilní typy vyvolávají chybu DATATYPE_MISMATCH ; implicitní přetypování se použijí, pokud je to možné.
Proměnné můžou být místní proměnné deklarované ve složených příkazech nebo proměnných relací vytvořených na DECLARE VARIABLE úrovni relace.
Příklady
-- Basic fetch into variables
> BEGIN
DECLARE x INT;
DECLARE y STRING;
DECLARE my_cursor CURSOR FOR
SELECT id, 'row_' || id FROM range(3);
OPEN my_cursor;
FETCH my_cursor INTO x, y;
VALUES (x, y);
CLOSE my_cursor;
END;
0|row_0
-- Fetch multiple rows with REPEAT loop
> BEGIN
DECLARE x INT;
DECLARE done BOOLEAN DEFAULT false;
DECLARE total INT DEFAULT 0;
DECLARE sum_cursor CURSOR FOR SELECT id FROM range(5);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
OPEN sum_cursor;
REPEAT
FETCH sum_cursor INTO x;
IF NOT done THEN
SET total = total + x;
END IF;
UNTIL done END REPEAT;
CLOSE sum_cursor;
VALUES (total);
END;
10
-- Fetch into a struct variable
> BEGIN
DECLARE result STRUCT<id: INT, name: STRING>;
DECLARE struct_cursor CURSOR FOR
SELECT id, 'name_' || id FROM range(3);
OPEN struct_cursor;
FETCH struct_cursor INTO result;
VALUES (result.id, result.name);
CLOSE struct_cursor;
END;
0|name_0
-- Using NEXT FROM (optional syntax)
> BEGIN
DECLARE x INT;
DECLARE cursor1 CURSOR FOR SELECT id FROM range(3);
OPEN cursor1;
FETCH NEXT FROM cursor1 INTO x;
VALUES (x);
CLOSE cursor1;
END;
0
Související články
- skriptování SQL
- Příkaz REPEAT
- Příkaz WHILE
- Složený příkaz (DECLARE CURSOR)
- Příkaz OPEN
- PŘÍKAZ CLOSE
- složený příkaz