Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
Databricks Runtime 18.1 и выше
Извлекает следующую строку из открытого курсора в переменные.
Инструкция FETCH извлекает одну строку за раз из результирующий набор курсора и назначает значения столбцов указанным переменным. Если нет дополнительных строк, вызывается условие CURSOR_NO_MORE_ROWS (SQLSTATE '02000').
Это оператор может использоваться только в составном операторе .
Замечание
Для FETCHприведения ошибок (например, DATATYPE_MISMATCH) можно вызвать при назначении значений столбцов переменным. Ошибки среды выполнения, такие как DIVIDE_BY_ZERO , также могут возникать и могут быть не связаны с строкой, извлекаемой из-за заданной природы обработки SQL.
Синтаксис
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Параметры
-
Имя открытого курсора. Курсор может быть необязателен с помощью метки составной инструкции (например,
outer_label.my_cursor). NEXT FROMНеобязательные ключевые слова.
NEXTиFROMявляются синтаксическим сахаром и не влияют на поведение. Поддерживается только перенаправление.-
Локальная или сеансовая переменная для получения значений столбцов. Число переменных должно соответствовать количеству столбцов в результирующем наборе курсора, за исключением одного исключения; в противном случае вызывается ASSIGNMENT_ARITY_MISMATCH :
- Если указана ровно одна переменная и она является типом
STRUCT, а курсор возвращает несколько столбцов, значения столбцов назначаются полям структуры по позиции.
Типы данных столбцов должны быть совместимы с целевыми переменными (или полями структуры) в соответствии с правилами назначения хранилища.
- Если указана ровно одна переменная и она является типом
Примечания.
При отсутствии дополнительных FETCH строк вызывает условие CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Это условие завершения, а не исключение: он не прерывает выполнение.
CURSOR_NO_MORE_ROWS Обработчик NOT FOUND может обработать его; NOT FOUND перехватывает все условия SQLSTATE'02xxx'.
Извлечение из курсора, который не открыт, вызывает CURSOR_NOT_OPEN. Совместимость типов следует правилам назначения хранилища: несовместимые типы вызывают ошибку DATATYPE_MISMATCH ; неявные приведения применяются, когда это возможно.
Переменные могут быть локальными переменными, объявленными в составной инструкции или переменных сеанса, созданных на DECLARE VARIABLE уровне сеанса.
Примеры
-- Basic fetch into variables
> BEGIN
DECLARE x INT;
DECLARE y STRING;
DECLARE my_cursor CURSOR FOR
SELECT id, 'row_' || id FROM range(3);
OPEN my_cursor;
FETCH my_cursor INTO x, y;
VALUES (x, y);
CLOSE my_cursor;
END;
0|row_0
-- Fetch multiple rows with REPEAT loop
> BEGIN
DECLARE x INT;
DECLARE done BOOLEAN DEFAULT false;
DECLARE total INT DEFAULT 0;
DECLARE sum_cursor CURSOR FOR SELECT id FROM range(5);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
OPEN sum_cursor;
REPEAT
FETCH sum_cursor INTO x;
IF NOT done THEN
SET total = total + x;
END IF;
UNTIL done END REPEAT;
CLOSE sum_cursor;
VALUES (total);
END;
10
-- Fetch into a struct variable
> BEGIN
DECLARE result STRUCT<id: INT, name: STRING>;
DECLARE struct_cursor CURSOR FOR
SELECT id, 'name_' || id FROM range(3);
OPEN struct_cursor;
FETCH struct_cursor INTO result;
VALUES (result.id, result.name);
CLOSE struct_cursor;
END;
0|name_0
-- Using NEXT FROM (optional syntax)
> BEGIN
DECLARE x INT;
DECLARE cursor1 CURSOR FOR SELECT id FROM range(3);
OPEN cursor1;
FETCH NEXT FROM cursor1 INTO x;
VALUES (x);
CLOSE cursor1;
END;
0