Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
Databricks Runtime 18.1 och senare
Hämtar nästa rad från en öppen markör till variabler.
Instruktionen FETCH hämtar en rad i taget från markörens resultatuppsättning och tilldelar kolumnvärden till de angivna variablerna. Om inga fler rader är tillgängliga utlöses CURSOR_NO_MORE_ROWS villkoret (SQLSTATE '02000').
Det här påståendet får endast användas inom en sammansatt sats .
Anmärkning
För FETCHkan gjutningsfel (till exempel DATATYPE_MISMATCH) genereras när du tilldelar kolumnvärden till variabler. Körningsfel som DIVIDE_BY_ZERO kan också inträffa och kan vara orelaterade till den rad som hämtas på grund av SQL-bearbetningens uppsättningsorienterade karaktär.
Syntax
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Parameterar
-
Namnet på en öppen markör. Markören kan eventuellt kvalificeras med en sammansatt instruktionsetikett (t.ex.
outer_label.my_cursor). NEXT FROMValfria nyckelord.
NEXTochFROMär syntaktisk socker och påverkar inte beteendet. Endast vidarebefordran av hämtning stöds.-
En lokal variabel eller sessionsvariabel för att ta emot kolumnvärden. Antalet variabler måste matcha antalet kolumner i markörens resultatuppsättning, med ett undantag. annars höjs ASSIGNMENT_ARITY_MISMATCH :
- Om exakt en variabel anges och den är en
STRUCTtyp och markören returnerar flera kolumner, tilldelas kolumnvärdena till struct-fälten efter position.
Kolumndatatyper måste vara kompatibla med målvariablerna (eller structfälten) enligt lagringstilldelningsregler.
- Om exakt en variabel anges och den är en
Noteringar
När inga fler rader är tillgängliga FETCH genererar det CURSOR_NO_MORE_ROWS villkoret (SQLSTATE '02000'). Det här är ett slutförandevillkor, inte ett undantag: det avbryter inte körningen. En NOT FOUND eller CURSOR_NO_MORE_ROWS -hanteraren kan bearbeta den. NOT FOUND Alla SQLSTATE-villkor '02xxx' fångas.
Om du hämtar från en markör som inte är öppen genereras CURSOR_NOT_OPEN. Typkompatibilitet följer reglerna för lagringstilldelning: inkompatibla typer ger upphov till ett DATATYPE_MISMATCH fel. implicita avgjutningar tillämpas när det är möjligt.
Variabler kan vara lokala variabler som deklareras i den sammansatta instruktionen eller sessionsvariabler som skapats med DECLARE VARIABLE på sessionsnivå.
Exempel
-- 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