Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
Runtime 18.1 e superiores
Obtém a próxima linha de um cursor aberto para 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 de CURSOR_NO_MORE_ROWS é elevada (SQLSTATE '02000').
Esta declaração só pode ser usada dentro de uma declaração composta .
Observação
Para FETCH, erros de lançamento (por exemplo, DATATYPE_MISMATCH) podem ser levantados ao atribuir valores de coluna a variáveis. Erros de execução como DIVIDE_BY_ZERO também podem ocorrer e podem não estar relacionados com a linha a ser obtida, devido à natureza orientada a conjuntos do processamento 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 uma etiqueta de instrução composta (por exemplo,
outer_label.my_cursor). NEXT FROMPalavras-chave opcionais.
NEXTeFROMsão açúcar sintático e não afetam o comportamento. Só é suportado o forward fetching.-
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 é elevado:
- Se exatamente uma variável for especificada e for um
STRUCTtipo, e o cursor devolver várias colunas, os valores das colunas são atribuídos aos campos da estrutura 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 de armazenamento.
- Se exatamente uma variável for especificada e for um
Observações
Quando não há mais linhas disponíveis, FETCH eleva-se a condição de CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Esta é uma condição de completão, não uma exceção: não aborta a execução. Um NOT FOUND handler ou CURSOR_NO_MORE_ROWS pode processá-lo; NOT FOUND capta todas as condições SQLSTATE '02xxx' .
Buscar a partir de um cursor que não está aberto aumenta CURSOR_NOT_OPEN. A compatibilidade de tipos segue as regras de atribuição de armazenamento: tipos incompatíveis geram um erro de DATATYPE_MISMATCH ; Os fundidos implícitos são aplicados sempre que possível.
As variáveis podem ser variáveis locais declaradas na instrução composta ou variáveis de sessão criadas com DECLARE VARIABLE ao 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