Sdílet prostřednictvím


PŘÍKAZ CLOSE

Platí pro:check označený ano Databricks Runtime 18.1 a novější

Zavře otevřený kurzor a uvolní jeho prostředky.

Příkaz CLOSE zavře kurzor, který byl dříve otevřen s OPENuvolněním paměti a prostředků přidružených k jeho sadě výsledků. Po zavření je možné kurzor znovu otevřít OPEN , aby se dotaz spustil znovu s čerstvými vazbami parametrů.

Tento příkaz lze použít pouze ve složeném příkazu .

Syntaxe

CLOSE cursor_name

Parametry

  • cursor_name

    Název otevřeného kurzoru. Kurzor může být volitelně kvalifikovaný pomocí popisku složeného příkazu (například outer_label.my_cursor).

Poznámky

Zavření kurzoru, který není otevřený , vyvolá CURSOR_NOT_OPEN.

Kurzory se automaticky zavírají v následujících scénářích:

  • Když se složený příkaz ukončí kvůli neošetřené výjimce (viz Chybové podmínky).
  • EXIT Při aktivaci obslužné rutiny (všechny kurzory ve složeného příkazu a vnořené sloučeniny jsou zavřené).
  • Když složený příkaz, který deklaruje, je obvykle ukončí.

Zavření kurzoru nemá vliv na deklaraci kurzoru. Název kurzoru zůstává v oboru a lze ho znovu otevřít.

Příklady

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