Delen via


CLOSE-instructie

Van toepassing op:controleren gemarkeerd als Ja Databricks Runtime 18.1 en hoger

Hiermee sluit u een geopende cursor en brengt u de bijbehorende resources vrij.

Met CLOSE de instructie wordt een cursor gesloten die eerder is geopend, OPENwaardoor het geheugen en de resources die aan de resultatenset zijn gekoppeld, worden vrijgemaakt. Nadat de cursor is gesloten, kan de cursor opnieuw worden geopend om OPEN de query opnieuw uit te voeren met nieuwe parameterbindingen.

Deze instructie mag alleen worden gebruikt binnen een samengestelde instructie.

Syntaxis

CLOSE cursor_name

Parameterwaarden

  • cursor_name

    De naam van een geopende cursor. De cursor kan eventueel worden gekwalificeerd met een samengesteld instructielabel (bijvoorbeeld outer_label.my_cursor).

Opmerkingen

Als u een cursor sluit die niet is geopend, wordt CURSOR_NOT_OPEN.

Cursors worden automatisch gesloten in de volgende scenario's:

  • Wanneer de samengestelde instructie wordt afgesloten vanwege een niet-verwerkte uitzondering (zie Foutvoorwaarden).
  • Wanneer een EXIT handler wordt geactiveerd (alle cursors in de samengestelde instructie en geneste verbindingen worden gesloten).
  • Wanneer de samengestelde instructie die deze declareert, normaal wordt afgesloten.

Het sluiten van een cursor heeft geen invloed op de declaratie van de cursor. De cursornaam blijft binnen het bereik en kan opnieuw worden geopend.

Voorbeelden

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