Condividi tramite


Istruzione FETCH

Si applica a:check contrassegnato come sì 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

  • cursor_name

    Nome di un cursore aperto. Il cursore può essere facoltativamente qualificato con un'etichetta di istruzione composta (ad esempio, outer_label.my_cursor).

  • NEXT FROM

    Parole chiave facoltative. NEXT e FROM sono zucchero sintattico e non influiscono sul comportamento. È supportato solo il recupero in avanti.

  • variable_name

    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 STRUCT tipo 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.

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