Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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