Condividi tramite


Istruzione OPEN

Si applica a:check contrassegnato come sì Databricks Runtime 18.1 e versioni successive

Apre un cursore ed esegue la query, posizionandola prima della prima riga.

L'istruzione OPEN esegue la query definita nella DECLARE CURSOR dichiarazione, associando eventuali marcatori di parametro, se specificato. Una volta aperto, il cursore può essere usato con FETCH per recuperare le righe.

Questa dichiarazione può essere usata solo all'interno di una dichiarazione composta .

Annotazioni

Quando si apre il cursore, vengono generati errori semantici come TABLE_OR_VIEW_NOT_FOUND o COLUMN_NOT_FOUND_IN_TABLE , se presenti. L'apertura del cursore avvia anche l'esecuzione della query, che può generare errori di runtime, ad esempio DIVIDE_BY_ZERO a seconda della quantità di esecuzione della query.

Sintassi

OPEN cursor_name [ USING { constant_expr [ AS param_name ] } [, ...] ]

Parametri

  • cursor_name

    Nome di un cursore dichiarato. Il cursore può essere facoltativamente qualificato con un'etichetta di istruzione composta per fare riferimento a un cursore da un ambito esterno ,ad esempio outer_label.my_cursor.

  • USING { constant_expr [ AS param_name ] } [, ...]

    Clausola facoltativa per associare i valori ai marcatori di parametro nella query del cursore.

Note

Il comportamento di associazione dei parametri corrisponde a EXECUTE IMMEDIATE:

Se la query del cursore genera un errore durante l'esecuzione (vedere Condizioni di errore), il cursore rimane in uno stato chiuso. L'apertura di un cursore non incluso nell'ambito genera CURSOR_NOT_FOUND. L'apertura di un cursore già aperto genera CURSOR_ALREADY_OPEN.

Esempi

-- Open a simple cursor without parameters
> BEGIN
    DECLARE total INT;
    DECLARE my_cursor CURSOR FOR SELECT sum(id) FROM range(10);

    OPEN my_cursor;
    FETCH my_cursor INTO total;
    VALUES (total);
    CLOSE my_cursor;
  END;
45

-- Open cursor with positional parameters
> BEGIN
    DECLARE total INT;
    DECLARE param_cursor CURSOR FOR
      SELECT sum(id) FROM range(100) WHERE id BETWEEN ? AND ?;

    OPEN param_cursor USING 10, 20;
    FETCH param_cursor INTO total;
    VALUES (total);
    CLOSE param_cursor;
  END;
165

-- Open cursor with named parameters
> BEGIN
    DECLARE min_val INT;
    DECLARE named_cursor CURSOR FOR
      SELECT min(id) FROM range(100) WHERE id >= :threshold;

    OPEN named_cursor USING 25 AS threshold;
    FETCH named_cursor INTO min_val;
    VALUES (min_val);
    CLOSE named_cursor;
  END;
25