Compartir a través de


Instrucción CLOSE

Se aplica a:check marcado yes Databricks Runtime 18.1 y versiones posteriores

Cierra un cursor abierto y libera sus recursos.

La CLOSE instrucción cierra un cursor que se abrió anteriormente con OPEN, liberando la memoria y los recursos asociados a su conjunto de resultados. Después de cerrar, el cursor se puede volver a abrir con OPEN para ejecutar la consulta de nuevo con enlaces de parámetros nuevos.

Esta instrucción solo se puede usar dentro de una instrucción compuesta.

Sintaxis

CLOSE cursor_name

Parámetros

  • cursor_name

    Nombre de un cursor abierto. El cursor se puede calificar opcionalmente con una etiqueta de instrucción compuesta (por ejemplo, outer_label.my_cursor).

Notas

Al cerrar un cursor que no está abierto, se genera CURSOR_NOT_OPEN.

Los cursores se cierran automáticamente en los escenarios siguientes:

  • Cuando se cierra la instrucción compuesta debido a una excepción no controlada (consulte Condiciones de error).
  • Cuando se desencadena un EXIT controlador (se cierran todos los cursores de la instrucción compuesta y los compuestos anidados).
  • Cuando la instrucción compuesta que las declara sale normalmente.

El cierre de un cursor no afecta a la declaración del cursor. El nombre del cursor permanece en el ámbito y se puede volver a abrir.

Examples

-- 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