Udostępnij przez


CLOSE, instrukcja

Dotyczy:sprawdzanie oznaczone jako tak Databricks Runtime 18.1 i nowszych

Zamyka otwarty kursor i zwalnia jego zasoby.

Instrukcja CLOSE zamyka kursor, który został wcześniej otwarty za OPENpomocą polecenia , zwalniając pamięć i zasoby skojarzone z zestawem wyników. Po zamknięciu kursor można ponownie otworzyć OPEN , aby wykonać zapytanie ponownie przy użyciu nowych powiązań parametrów.

Ta wiadomość może być używana tylko w ramach złożonego wyrażenia .

Składnia

CLOSE cursor_name

Parametry

  • Cursor_name

    Nazwa otwartego kursora. Kursor można opcjonalnie zakwalifikować za pomocą etykiety instrukcji złożonej (na przykład outer_label.my_cursor).

Notatki

Zamknięcie kursora, który nie jest otwarty, wywołuje CURSOR_NOT_OPEN.

Kursory są automatycznie zamykane w następujących scenariuszach:

  • Gdy instrukcja compound kończy działanie z powodu nieobsługiwanego wyjątku (zobacz Warunki błędu).
  • Po wyzwoleniu EXIT programu obsługi (wszystkie kursory w instrukcji złożonej i zagnieżdżone związki są zamknięte).
  • Gdy instrukcja złożony, która deklaruje je, kończy się normalnie.

Zamknięcie kursora nie wpływa na deklarację kursora. Nazwa kursora pozostaje w zakresie i może zostać ponownie otwarta.

Przykłady

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