Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
Databricks Runtime 18.1 и выше
Открывает курсор и выполняет запрос, позиционируя его перед первой строкой.
Инструкция OPEN выполняет запрос, определенный в DECLARE CURSOR объявлении, привязывая все маркеры параметров, если указано. После открытия курсор можно использовать для FETCH извлечения строк.
Это оператор может использоваться только в составном операторе .
Замечание
При открытии курсора возникают семантические ошибки, такие как TABLE_OR_VIEW_NOT_FOUND или COLUMN_NOT_FOUND_IN_TABLE . Открытие курсора также запускает выполнение запроса, что может вызвать ошибки среды выполнения, такие как DIVIDE_BY_ZERO в зависимости от того, сколько выполняется запрос.
Синтаксис
OPEN cursor_name [ USING { constant_expr [ AS param_name ] } [, ...] ]
Параметры
-
Имя объявленного курсора. Курсор может быть необязателен с помощью метки составной инструкции для ссылки на курсор из внешней области (например,
outer_label.my_cursor). USING { constant_expr [ AS param_name ] } [, ...]Необязательное предложение для привязки значений к маркерам параметров в запросе курсора.
- constant_expr: константное выражение (литерал или переменная) для привязки к маркеру параметра. Выражение должно быть приведение к типу, ожидаемому запросом.
-
AS param_name: необязательно. Для именованных маркеров параметров (
:param_name) это указывает, какой параметр необходимо привязать. Если не указано для маркеров неименованных параметров (?), параметры привязаны по позиции.
Примечания.
Поведение привязки параметров соответствует EXECUTE IMMEDIATE:
- Все маркеры параметров в запросе должны быть привязаны.
- Для именованных маркеров параметров (
:name),AS param_nameпредложение указывает привязку. - Для маркеров неименованных параметров (
?) выражения привязаны в указанном порядке.
Если запрос курсора вызывает ошибку во время выполнения (см. условия ошибки), курсор остается в закрытом состоянии. Открытие курсора, который не находится в области, вызывает CURSOR_NOT_FOUND. Открытие курсора, который уже открыт, вызывает CURSOR_ALREADY_OPEN.
Примеры
-- Open a simple cursor without parameters
> BEGIN
DECLARE total INT;
DECLARE my_cursor CURSOR FOR SELECT sum(id) FROM range(10);
OPEN my_cursor;
FETCH my_cursor INTO total;
VALUES (total);
CLOSE my_cursor;
END;
45
-- Open cursor with positional parameters
> BEGIN
DECLARE total INT;
DECLARE param_cursor CURSOR FOR
SELECT sum(id) FROM range(100) WHERE id BETWEEN ? AND ?;
OPEN param_cursor USING 10, 20;
FETCH param_cursor INTO total;
VALUES (total);
CLOSE param_cursor;
END;
165
-- Open cursor with named parameters
> BEGIN
DECLARE min_val INT;
DECLARE named_cursor CURSOR FOR
SELECT min(id) FROM range(100) WHERE id >= :threshold;
OPEN named_cursor USING 25 AS threshold;
FETCH named_cursor INTO min_val;
VALUES (min_val);
CLOSE named_cursor;
END;
25