Détermination du nombre de lignes affectées par des commandes DML¶
Après l’exécution d’une commande DML (à l’exclusion de la commande TRUNCATE TABLE), Snowflake Scripting paramètre les variables globales suivantes. Vous pouvez utiliser ces variables pour déterminer si la dernière instruction DML a affecté des lignes.
Variable |
Description |
---|---|
|
Nombre de lignes affectées par la dernière instruction DML. Ceci est équivalent à |
|
|
|
|
Les exemples de cette section utilisent le tableau suivant :
CREATE OR REPLACE TABLE my_values (value NUMBER);
L’exemple suivant utilise la variable SQLROWCOUNT
pour renvoyer le nombre de lignes affectées par la dernière instruction DML (l’instruction INSERT). L’instruction SELECT n’est pas une instruction DML et n’a aucun effet sur la variable SQLROWCOUNT
.
BEGIN
INSERT INTO my_values VALUES (1), (2), (3);
SELECT * from my_values;
RETURN SQLROWCOUNT;
END;
Remarque : si vous utilisez SnowSQL, Classic Console, ou la méthode execute_stream
ou execute_string
dans le code Python Connector, utilisez cet exemple à la place (voir Utilisation d’Exécution de scripts Snowflake dans SnowSQL, Classic Console, et le connecteur Python) :
EXECUTE IMMEDIATE $$
BEGIN
INSERT INTO my_values VALUES (1), (2), (3);
SELECT * from my_values;
RETURN SQLROWCOUNT;
END;
$$;
+-----------------+
| anonymous block |
|-----------------|
| 3 |
+-----------------+
L’exemple suivant utilise les variables SQLFOUND
et SQLNOTFOUND
pour retourner le nombre de lignes affectées par la dernière instruction DML (l’instruction UPDATE). Comme dans l’exemple précédent, l’instruction SELECT n’affecte pas les variables SQLFOUND
et SQLNOTFOUND
.
BEGIN
IF ((SELECT MAX(value) FROM my_values) > 2) THEN
UPDATE my_values SET value = 4 WHERE value < 3;
END IF;
SELECT * from my_values;
IF (SQLFOUND = true) THEN
RETURN 'Updated ' || SQLROWCOUNT || ' rows.';
ELSEIF (SQLNOTFOUND = true) THEN
RETURN 'No rows updated.';
ELSE
RETURN 'No DML statements executed.';
END IF;
END;
Remarque : si vous utilisez SnowSQL, Classic Console, ou la méthode execute_stream
ou execute_string
dans le code Python Connector, utilisez cet exemple à la place (voir Utilisation d’Exécution de scripts Snowflake dans SnowSQL, Classic Console, et le connecteur Python) :
EXECUTE IMMEDIATE $$
BEGIN
IF ((SELECT MAX(value) FROM my_values) > 2) THEN
UPDATE my_values SET value = 4 WHERE value < 3;
END IF;
SELECT * from my_values;
IF (SQLFOUND = true) THEN
RETURN 'Updated ' || SQLROWCOUNT || ' rows.';
ELSEIF (SQLNOTFOUND = true) THEN
RETURN 'No rows updated.';
ELSE
RETURN 'No DML statements executed.';
END IF;
END;
$$;
Lorsque le bloc anonyme s’exécute, la variable SQLFOUND
est true
car l’instruction UPDATE met à jour deux lignes.
+-----------------+
| anonymous block |
|-----------------|
| Updated 2 rows. |
+-----------------+
Interrogez la table pour connaître les valeurs actuelles :
SELECT * FROM my_values;
+-------+
| VALUE |
|-------|
| 4 |
| 4 |
| 3 |
+-------+
Exécutez à nouveau le même bloc anonyme et vous obtiendrez les résultats suivants :
L’instruction UPDATE est exécutée parce que la table contient une valeur supérieure à
2
. En d’autres termes, la condition IF est satisfaite.La variable
SQLNOTFOUND
esttrue
car aucune ligne n’est mise à jour. L’instruction UPDATE ne met à jour aucune ligne car aucune des valeurs de la table n’est inférieure à3
(spécifiée dans la clause WHERE).
La requête renvoie le résultat suivant :
+------------------+
| anonymous block |
|------------------|
| No rows updated. |
+------------------+
Mettez maintenant à jour la table pour que l’ensemble des valeurs soit fixé à 1
:
UPDATE my_values SET value = 1;
SELECT * FROM my_values;
+-------+
| VALUE |
|-------|
| 1 |
| 1 |
| 1 |
+-------+
Exécutez à nouveau le même bloc anonyme et l’instruction UPDATE n’est pas exécutée car aucune des valeurs de la table n’est supérieure à 2
. En d’autres termes, la condition IF n’étant pas remplie, l’instruction UPDATE ne s’exécute pas.
+-----------------------------+
| anonymous block |
|-----------------------------|
| No DML statements executed. |
+-----------------------------+