Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Si applica a:
Databricks Runtime 18.1 e versioni successive
Recupera la riga successiva da un cursore aperto in variabili.
L'istruzione FETCH recupera una riga alla volta dal set di risultati del cursore e assegna i valori di colonna alle variabili specificate. Se non sono disponibili altre righe, viene generata la condizione CURSOR_NO_MORE_ROWS (SQLSTATE '02000').
Questa dichiarazione può essere usata solo all'interno di una dichiarazione composta .
Annotazioni
Per FETCH, è possibile generare errori di cast, ad esempio DATATYPE_MISMATCH, quando si assegnano valori di colonna alle variabili. Gli errori di runtime, ad esempio DIVIDE_BY_ZERO , possono verificarsi e possono non essere correlati alla riga recuperata, a causa della natura orientata al set dell'elaborazione SQL.
Sintassi
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Parametri
-
Nome di un cursore aperto. Il cursore può essere facoltativamente qualificato con un'etichetta di istruzione composta (ad esempio,
outer_label.my_cursor). NEXT FROMParole chiave facoltative.
NEXTeFROMsono zucchero sintattico e non influiscono sul comportamento. È supportato solo il recupero in avanti.-
Variabile locale o di sessione per ricevere i valori di colonna. Il numero di variabili deve corrispondere al numero di colonne nel set di risultati del cursore, con un'eccezione; in caso contrario , viene generato ASSIGNMENT_ARITY_MISMATCH :
- Se si specifica esattamente una variabile e si tratta di un
STRUCTtipo e il cursore restituisce più colonne, i valori della colonna vengono assegnati ai campi dello struct in base alla posizione.
I tipi di dati delle colonne devono essere compatibili con le variabili di destinazione (o i campi struct) in base alle regole di assegnazione dell'archivio.
- Se si specifica esattamente una variabile e si tratta di un
Note
Quando non sono disponibili altre righe, FETCH genera la condizione di CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Si tratta di una condizione di completamento, non di un'eccezione: non interrompe l'esecuzione. Un NOT FOUND gestore o CURSOR_NO_MORE_ROWS può elaborarlo. NOT FOUND Intercetta tutte le condizioni DI SQLSTATE '02xxx' .
Il recupero da un cursore che non è aperto genera CURSOR_NOT_OPEN. La compatibilità dei tipi segue le regole di assegnazione dell'archivio: i tipi incompatibili generano un errore DATATYPE_MISMATCH ; I cast impliciti vengono applicati quando possibile.
Le variabili possono essere variabili locali dichiarate nell'istruzione composta o nelle variabili di sessione create con DECLARE VARIABLE a livello di sessione.
Esempi
-- 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