Bestimmung der Anzahl der von DML-Befehlen betroffenen Zeilen¶
Nach der Ausführung jedes DML-Befehls legt Snowflake Scripting die folgenden globalen Variablen fest. Sie können diese Variablen verwenden, um festzustellen, ob von der letzten DML-Anweisung irgendwelche Zeilen betroffen sind.
Variable |
Beschreibung |
---|---|
|
Anzahl der von der letzten DML-Anweisung betroffenen Zeilen. Dies ist äquivalent zu |
|
|
|
|
Im folgenden Beispiel wird die Variable SQLROWCOUNT
verwendet, um die Anzahl der Zeilen zurückzugeben, die von der letzten DML-Anweisung (in diesem Beispiel die INSERT-Anweisung) betroffen sind. Beachten Sie, dass die SELECT-Anweisung keine DML-Anweisung ist und keine Auswirkungen auf die Variable SQLROWCOUNT
hat.
EXECUTE IMMEDIATE $$
BEGIN
-- Insert 3 rows into a table.
INSERT INTO my_values VALUES (1), (2), (3);
-- SQLROWCOUNT is not affected by statements
-- that are not DML statements (e.g. SELECT statements).
SELECT * from my_values;
-- Returns the number of rows affected by
-- the last DML statement (the INSERT statement).
RETURN SQLROWCOUNT;
END;
$$;
+-----------------+
| anonymous block |
|-----------------|
| 3 |
+-----------------+
Im folgenden Beispiel werden die Variablen SQLFOUND
und SQLNOTFOUND
verwendet, um die Anzahl der Zeilen zurückzugeben, die von der letzten DML-Anweisung (der UPDATE-Anweisung) betroffen sind. Wie im vorherigen Beispiel hat die SELECT-Anweisung keine Auswirkungen auf die Variablen SQLFOUND
und SQLNOTFOUND
.
EXECUTE IMMEDIATE $$
BEGIN
-- Update the rows in a table that have values less than 3.
UPDATE my_values SET value = 4 WHERE value < 3;
-- SQLFOUND and SQLNOTFOUND are not affected by statements
-- that are not DML statements (e.g. SELECT statements).
SELECT * from my_values;
-- SQLFOUND returns 'true' if the last DML statement
-- (the UPDATE statement) affected one or more rows.
IF (SQLFOUND = true) THEN
RETURN 'Updated ' || SQLROWCOUNT || ' rows.';
-- SQLNOTFOUND returns 'true' if the last DML statement
-- (the UPDATE statement) affected zero rows.
ELSEIF (SQLNOTFOUND = true) THEN
RETURN 'No rows updated.';
ELSE
RETURN 'SQLFOUND and SQLNOTFOUND are not true.';
END IF;
END;
$$;
+-----------------+
| anonymous block |
|-----------------|
| Updated 2 rows. |
+-----------------+