Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
S’applique à :
Databricks Runtime 18.1 et versions ultérieures
Récupère la ligne suivante à partir d’un curseur ouvert dans des variables.
L’instruction FETCH récupère une ligne à la fois à partir du jeu de résultats du curseur et affecte des valeurs de colonne aux variables spécifiées. Si aucune ligne supplémentaire n’est disponible, la condition CURSOR_NO_MORE_ROWS est levée (SQLSTATE '02000').
Cette instruction peut uniquement être utilisée dans une instruction composée.
Note
Pour FETCHles erreurs de conversion (par exemple, DATATYPE_MISMATCH) peuvent être déclenchées lors de l’affectation de valeurs de colonne à des variables. Des erreurs d’exécution telles que DIVIDE_BY_ZERO peuvent également se produire et ne peuvent pas être liées à la ligne extraite, en raison de la nature définie du traitement SQL.
Syntaxe
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Paramètres
-
Nom d’un curseur ouvert. Le curseur peut éventuellement être qualifié avec une étiquette d’instruction composée (par exemple
outer_label.my_cursor). NEXT FROMMots clés facultatifs.
NEXTetFROMsont le sucre syntactique et n’affectent pas le comportement. Seule la récupération vers l’avant est prise en charge.-
Variable locale ou de session pour recevoir des valeurs de colonne. Le nombre de variables doit correspondre au nombre de colonnes dans le jeu de résultats du curseur, à une exception près ; sinon , ASSIGNMENT_ARITY_MISMATCH est levée :
- Si exactement une variable est spécifiée et qu’il s’agit d’un
STRUCTtype et que le curseur retourne plusieurs colonnes, les valeurs de colonne sont affectées aux champs du struct par position.
Les types de données de colonne doivent être compatibles avec les variables cibles (ou champs de struct) en fonction des règles d’affectation de magasin.
- Si exactement une variable est spécifiée et qu’il s’agit d’un
Remarques
Quand aucune ligne supplémentaire n’est disponible, FETCH déclenche la condition de CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Il s’agit d’une condition d’achèvement, et non d’une exception : elle n’abandonne pas l’exécution. Un NOT FOUND ou CURSOR_NO_MORE_ROWS un gestionnaire peut le traiter ; NOT FOUND intercepte toutes les conditions SQLSTATE '02xxx' .
L’extraction à partir d’un curseur qui n’est pas ouvert déclenche CURSOR_NOT_OPEN. La compatibilité des types suit les règles d’affectation de magasin : les types incompatibles déclenchent une erreur de DATATYPE_MISMATCH ; les casts implicites sont appliqués lorsque cela est possible.
Les variables peuvent être des variables locales déclarées dans l’instruction composée ou les variables de session créées au DECLARE VARIABLE niveau de la session.
Exemples
-- 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