Поделиться через


Оператор CLOSE

Область применения:check помечена да Databricks Runtime 18.1 и выше

Закрывает открытый курсор и освобождает свои ресурсы.

Оператор CLOSE закрывает курсор, который был открыт ранее, OPENосвобождая память и ресурсы, связанные с его результирующий набор. После закрытия курсор можно повторно открыть для OPEN выполнения запроса с помощью новых привязок параметров.

Это оператор может использоваться только в составном операторе .

Синтаксис

CLOSE cursor_name

Параметры

  • cursor_name

    Имя открытого курсора. Курсор может быть необязателен с помощью метки составной инструкции (например, outer_label.my_cursor).

Примечания.

Закрытие курсора, который не открыт, вызывает CURSOR_NOT_OPEN.

Курсоры автоматически закрываются в следующих сценариях:

  • Когда составная инструкция завершает работу из-за необработанного исключения (см. условия ошибки).
  • При активации обработчика EXIT (все курсоры в составной инструкции и вложенные соединения закрываются).
  • Когда составная инструкция, объявляющая их, обычно завершает работу.

Закрытие курсора не влияет на объявление курсора. Имя курсора остается в области и может быть повторно открыт.

Примеры

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