DML 명령의 영향을 받는 행 수 확인하기

DML 명령 이 실행된 후 Snowflake Scripting은 다음 전역 변수를 설정합니다. 이 변수를 사용하면 마지막 DML 문이 행에 영향을 미쳤는지 확인할 수 있습니다.

변수

설명

SQLROWCOUNT

마지막 DML 문의 영향을 받는 행 수입니다.

이것은 JavaScript 저장 프로시저의 getNumRowsAffected() 와 동일합니다.

SQLFOUND

마지막 DML 문이 하나 이상의 행에 영향을 미쳤으면 true 입니다.

SQLNOTFOUND

마지막 DML 문이 0 행에 영향을 미쳤으면 true 입니다.

다음 예에서는 SQLROWCOUNT 변수를 사용하여, 마지막 DML 문(이 예에서는 INSERT 문)의 영향을 받는 행 수를 반환합니다. SELECT 문은 DML 문이 아니며 SQLROWCOUNT 변수에 영향을 미치지 않습니다.

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

다음 예에서는 SQLFOUNDSQLNOTFOUND 변수를 사용하여, 마지막 DML 문(UPDATE 문)의 영향을 받는 행 수를 반환합니다. 앞의 예와 마찬가지로 SELECT 문은 SQLFOUNDSQLNOTFOUND 변수에 영향을 주지 않습니다.

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