Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
Databricks Runtime 18.1 y versiones posteriores
Captura la siguiente fila de un cursor abierto en variables.
La FETCH instrucción recupera una fila a la vez del conjunto de resultados del cursor y asigna valores de columna a las variables especificadas. Si no hay más filas disponibles, se genera la condición CURSOR_NO_MORE_ROWS (SQLSTATE '02000').
Esta instrucción solo se puede usar dentro de una instrucción compuesta.
Nota:
Para FETCH, se pueden generar errores de conversión (por ejemplo, DATATYPE_MISMATCH) al asignar valores de columna a variables. Los errores en tiempo de ejecución, como DIVIDE_BY_ZERO , también pueden producirse y pueden no estar relacionados con la fila que se captura, debido a la naturaleza orientada a conjuntos del procesamiento de SQL.
Sintaxis
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Parámetros
-
Nombre de un cursor abierto. El cursor se puede calificar opcionalmente con una etiqueta de instrucción compuesta (por ejemplo,
outer_label.my_cursor). NEXT FROMPalabras clave opcionales.
NEXTyFROMson azúcar sintáctica y no afectan al comportamiento. Solo se admite la captura de reenvío.-
Variable local o de sesión para recibir valores de columna. El número de variables debe coincidir con el número de columnas del conjunto de resultados del cursor, con una excepción; De lo contrario , se genera ASSIGNMENT_ARITY_MISMATCH :
- Si se especifica exactamente una variable y es un
STRUCTtipo, y el cursor devuelve varias columnas, los valores de columna se asignan a los campos de la estructura por posición.
Los tipos de datos de columna deben ser compatibles con las variables de destino (o campos de estructura) según las reglas de asignación de almacén.
- Si se especifica exactamente una variable y es un
Notas
Cuando no haya más filas disponibles, FETCH genera la condición de CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Se trata de una condición de finalización, no una excepción: no anula la ejecución. Un NOT FOUND controlador o CURSOR_NO_MORE_ROWS puede procesarlo; NOT FOUND detecta todas las condiciones de SQLSTATE '02xxx' .
La captura desde un cursor que no está abierto genera CURSOR_NOT_OPEN. La compatibilidad de tipos sigue las reglas de asignación de almacén: los tipos incompatibles generan un error de DATATYPE_MISMATCH ; las conversiones implícitas se aplican siempre que sea posible.
Las variables pueden ser variables locales declaradas en la instrucción compuesta o en las variables de sesión creadas con DECLARE VARIABLE en el nivel de sesión.
Examples
-- 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