Determinando o número de linhas afetadas por instruções SQL¶
Depois que um comando DML é executado (excluindo o comando TRUNCATE TABLE), o Snowflake Scripting define as seguintes variáveis globais. Você pode usar as variáveis para determinar se a última instrução DML afetou todas as linhas ou quantas linhas foram retornadas por uma consulta.
Variável |
Descrição |
|---|---|
|
Número de linhas afetadas pela última instrução DML ou o número de linhas retornadas pela última consulta SELECT. Definido após a execução de cada instrução. |
|
Número de linhas afetadas pela última instrução DML. Isso é equivalente a |
|
|
|
|
Nota
O pacote de mudança de comportamento 2025_01 altera o comportamento dessas variáveis. Quando o pacote está ativado, as variáveis retornam NULL quando uma instrução que não é DML é executada após a última instrução DML em um bloco do Snowflake Scripting ou procedimento armazenado. O pacote é ativado por padrão. Para obter mais informações sobre a mudança de comportamento, consulte Snowflake Scripting: alterações das variáveis globais.
Se o pacote estiver desativado, você pode ativá-lo na sua conta executando o seguinte comando:
Para desativar o pacote, execute a seguinte instrução:
Os exemplos nesta seção usam a seguinte tabela:
O exemplo a seguir usa a variável SQLROWCOUNT para retornar o número de linhas afetadas pela última instrução DML (a instrução INSERT).
Observação: se você usa a Snowflake CLI, o SnowSQL, o Console clássico, o método execute_stream ou execute_string no código do conector Python, use este exemplo (consulte Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
O exemplo a seguir usa as variáveis SQLFOUND e SQLNOTFOUND para retornar o número de linhas afetadas pela última instrução DML (a instrução UPDATE).
Observação: se você usa a Snowflake CLI, o SnowSQL, o Console clássico, o método execute_stream ou execute_string no código do conector Python, use este exemplo (consulte Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
Quando o bloco anônimo é executado, a variável SQLFOUND é true porque a instrução UPDATE atualiza duas linhas.
Consulte a tabela para ver os valores atuais:
Execute o mesmo bloco anônimo novamente, e os resultados são os seguintes:
A instrução UPDATE é executada porque há um valor na tabela que é maior que
2. Ou seja, a condição IF é satisfeita.A variável
SQLNOTFOUNDétrueporque nenhuma linha é atualizada. A instrução UPDATE não atualiza nenhuma linha porque nenhum dos valores da tabela é menor que3(especificado na cláusula WHERE).
A consulta retorna a seguinte saída:
Agora, atualize a tabela para definir todos os valores como 1:
Execute o mesmo bloco anônimo novamente e a instrução UPDATE não será executada porque nenhum dos valores da tabela é maior que 2. Ou seja, a condição IF não é satisfeita, portanto, a instrução UPDATE não é executada.
Exemplos ACTIVITY_COUNT¶
Ao contrário de SQLROWCOUNT, a variável ACTIVITY_COUNT é definida após a execução de cada instrução, incluindo consultas SELECT. Desse modo, ela é útil para rastrear tanto o número de linhas afetadas pelas operações DML quanto o número de linhas retornadas pelas consultas.
O exemplo a seguir demonstra ACTIVITY_COUNT após uma instrução INSERT e uma consulta SELECT:
Observação: se você usa a Snowflake CLI, o SnowSQL, o Console clássico, o método execute_stream ou execute_string no código do conector Python, use este exemplo (consulte Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
Após INSERT, ACTIVITY_COUNT é 3 (três linhas inseridas). Após SELECT, ACTIVITY_COUNT é 2 (duas linhas correspondem à condição WHERE value > 1).