Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
Databricks Runtime 18.1 e superior
Busca a próxima linha de um cursor aberto em variáveis.
A FETCH instrução recupera uma linha de cada vez do conjunto de resultados do cursor e atribui valores de coluna às variáveis especificadas. Se não houver mais linhas disponíveis, a condição CURSOR_NO_MORE_ROWS será gerada (SQLSTATE '02000').
Essa instrução só pode ser usada em uma instrução composta.
Observação
Para FETCH, erros de conversão (por exemplo, DATATYPE_MISMATCH) podem ser gerados ao atribuir valores de coluna a variáveis. Erros de runtime, como DIVIDE_BY_ZERO , também podem ocorrer e não podem estar relacionados à linha que está sendo buscada devido à natureza orientada ao conjunto do processamento do SQL.
Sintaxe
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Parâmetros
-
O nome de um cursor aberto. O cursor pode ser opcionalmente qualificado com um rótulo de instrução composta (por exemplo,
outer_label.my_cursor). NEXT FROMPalavras-chave opcionais.
NEXTeFROMsão açúcar sintactico e não afetam o comportamento. Há suporte apenas para a busca de encaminhamento.-
Uma variável local ou de sessão para receber valores de coluna. O número de variáveis deve corresponder ao número de colunas no conjunto de resultados do cursor, com uma exceção; caso contrário , ASSIGNMENT_ARITY_MISMATCH será gerado:
- Se exatamente uma variável for especificada e for um
STRUCTtipo e o cursor retornar várias colunas, os valores de coluna serão atribuídos aos campos do struct por posição.
Os tipos de dados de coluna devem ser compatíveis com as variáveis de destino (ou campos de struct) de acordo com as regras de atribuição do repositório.
- Se exatamente uma variável for especificada e for um
Anotações
Quando não há mais linhas disponíveis, FETCH gera a condição de CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Essa é uma condição de conclusão, não uma exceção: ela não anula a execução. Um NOT FOUND ou CURSOR_NO_MORE_ROWS manipulador pode processá-lo; NOT FOUND captura todas as condições do SQLSTATE '02xxx' .
Buscar de um cursor que não está aberto gera CURSOR_NOT_OPEN. A compatibilidade de tipos segue as regras de atribuição do repositório: tipos incompatíveis geram um erro de DATATYPE_MISMATCH ; as conversões implícitas são aplicadas quando possível.
As variáveis podem ser variáveis locais declaradas na instrução composta ou variáveis de sessão criadas no DECLARE VARIABLE nível da sessão.
Exemplos
-- 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