Partilhar via


Declaração FINAL

Aplica-se a:sim Databricks Runtime 18.1 e superiores

Fecha um cursor aberto e liberta os seus recursos.

A CLOSE instrução fecha um cursor que foi anteriormente aberto com OPEN, libertando a memória e os recursos associados ao seu conjunto de resultados. Após o encerramento, o cursor pode ser reaberto para OPEN executar a consulta novamente com novas ligações de parâmetros.

Esta declaração só pode ser usada dentro de uma declaração composta .

Sintaxe

CLOSE cursor_name

Parâmetros

  • cursor_name

    O nome de um cursor aberto. O cursor pode ser opcionalmente qualificado com uma etiqueta de instrução composta (por exemplo, outer_label.my_cursor).

Observações

Fechar um cursor que não está aberto levanta CURSOR_NOT_OPEN.

Os cursores são automaticamente fechados nos seguintes cenários:

  • Quando a afirmação composta sai devido a uma exceção não tratada (ver Condições de erro).
  • Quando um EXIT handler é acionado (todos os cursores na instrução compound e os compounds aninhados são fechados).
  • Quando a instrução composta que os declara sai normalmente.

Fechar um cursor não afeta a declaração do cursor. O nome do cursor mantém-se dentro do âmbito e pode ser reaberto.

Exemplos

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