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

SQLROWCOUNT

Anzahl der von der letzten DML-Anweisung betroffenen Zeilen.

Dies ist äquivalent zu getNumRowsAffected() in gespeicherten JavaScript-Prozeduren.

SQLFOUND

true, wenn von der letzten DML-Anweisung eine oder mehrere Zeilen betroffen sind.

SQLNOTFOUND

true, wenn von der letzten DML-Anweisung keine Zeile mehr betroffen ist.

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 |
+-----------------+
Copy

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. |
+-----------------+
Copy