Condividi tramite


Istruzione CLOSE

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

Chiude un cursore aperto e rilascia le relative risorse.

L'istruzione CLOSE chiude un cursore aperto in precedenza con OPEN, liberando la memoria e le risorse associate al set di risultati. Dopo la chiusura, il cursore può essere riaperto con OPEN per eseguire di nuovo la query con associazioni di parametri nuove.

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

Sintassi

CLOSE cursor_name

Parametri

  • cursor_name

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

Note

La chiusura di un cursore non aperto genera CURSOR_NOT_OPEN.

I cursori vengono chiusi automaticamente negli scenari seguenti:

  • Quando l'istruzione composta viene chiusa a causa di un'eccezione non gestita (vedere Condizioni di errore).
  • Quando viene attivato un EXIT gestore (tutti i cursori nell'istruzione composta e i composti annidati vengono chiusi).
  • Quando l'istruzione composta che li dichiara viene chiusa normalmente.

La chiusura di un cursore non influisce sulla dichiarazione del cursore. Il nome del cursore rimane nell'ambito e può essere riaperto.

Esempi

-- Basic cursor lifecycle
> BEGIN
    DECLARE x INT;
    DECLARE my_cursor CURSOR FOR SELECT id FROM range(3);

    OPEN my_cursor;
    FETCH my_cursor INTO x;
    VALUES (x);
    CLOSE my_cursor;
  END;
0

-- Close cursor in handler
> BEGIN
    DECLARE x INT;
    DECLARE my_cursor CURSOR FOR SELECT id FROM range(2);

    DECLARE EXIT HANDLER FOR NOT FOUND
      BEGIN
        CLOSE my_cursor;
        VALUES ('Cursor closed on completion');
      END;

    OPEN my_cursor;
    REPEAT
      FETCH my_cursor INTO x;
    UNTIL false END REPEAT;
  END;
Cursor closed on completion

-- Reopen cursor with different parameters
> BEGIN
    DECLARE result STRING DEFAULT '';
    DECLARE x INT;
    DECLARE param_cursor CURSOR FOR SELECT id FROM range(10) WHERE id = ?;

    OPEN param_cursor USING 3;
    FETCH param_cursor INTO x;
    SET result = 'First open: ' || CAST(x AS STRING);
    CLOSE param_cursor;

    OPEN param_cursor USING 7;
    FETCH param_cursor INTO x;
    SET result = result || '; Second open: ' || CAST(x AS STRING);
    CLOSE param_cursor;

    VALUES (result);
  END;
First open: 3; Second open: 7