Partager via


INSTRUCTION CLOSE

S’applique à :check marqué oui Databricks Runtime 18.1 et versions ultérieures

Ferme un curseur ouvert et libère ses ressources.

L’instruction CLOSE ferme un curseur qui a été ouvert précédemment avec OPEN, libérant la mémoire et les ressources associées à son jeu de résultats. Après la fermeture, le curseur peut être rouvert pour OPEN réexécuter la requête avec de nouvelles liaisons de paramètres.

Cette instruction peut uniquement être utilisée dans une instruction composée.

Syntaxe

CLOSE cursor_name

Paramètres

  • cursor_name

    Nom d’un curseur ouvert. Le curseur peut éventuellement être qualifié avec une étiquette d’instruction composée (par exemple). outer_label.my_cursor

Remarques

La fermeture d’un curseur qui n’est pas ouvert déclenche CURSOR_NOT_OPEN.

Les curseurs sont automatiquement fermés dans les scénarios suivants :

  • Lorsque l’instruction composée se termine en raison d’une exception non gérée (voir conditions d’erreur).
  • Lorsqu’un EXIT gestionnaire est déclenché (tous les curseurs de l’instruction composée et des composés imbriqués sont fermés).
  • Lorsque l’instruction composée qui les déclare quitte normalement.

La fermeture d’un curseur n’affecte pas la déclaration de curseur. Le nom du curseur reste dans l’étendue et peut être rouvert.

Exemples

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