Compartilhar via


instrução FOR

Aplica-se a:verificação marcada como sim Databricks SQL verificação marcada como sim Databricks Runtime 16.3 e superior

Repita a execução de uma lista de instruções para cada linha retornada por consulta.

Essa instrução só pode ser usada em uma instrução composta.

Sintaxe

[ label : ] FOR [ variable_name AS ] query
  DO
  { stmt ; } [...]
  END FOR [ label ]

Parâmetros

  • etiqueta

    Um rótulo opcional para o loop que é único entre todos os rótulos de instruções nas quais a instrução FOR está contida. Se um rótulo final for especificado, ele deverá corresponder ao rótulo inicial. O rótulo pode ser usado para PARAR ou REPETIR o loop. Para qualificar referências de coluna de loop, use o variable_name, não o label.

  • variable_name

    Um nome opcional que você pode usar como qualificador ao referenciar as colunas no cursor.

  • stmt

    Uma instrução SQL

Anotações

Se a consulta opera em uma tabela que também é modificada dentro do corpo do loop, a semântica depende da fonte de dados. Para tabelas Delta, a consulta permanecerá não afetada. O Databricks não garante a execução completa da consulta se o loop FOR for concluído prematuramente devido a uma condição de erro ou a uma instrução LEAVE. Quando exceções ou efeitos colaterais ocorrem durante a execução da consulta, o Databricks não garante em qual ponto no tempo dentro do loop eles ocorrem. Geralmente FOR, os loops podem ser substituídos por consultas relacionais, que normalmente são mais eficientes.

Exemplos

-- sum up all odd numbers from 1 through 10
> BEGIN
    DECLARE sum INT DEFAULT 0;
    sumNumbers: FOR row AS SELECT num FROM range(1, 20) AS t(num) DO
      IF num > 10 THEN
         LEAVE sumNumbers;
      ELSEIF num % 2 = 0 THEN
        ITERATE sumNumbers;
      END IF;
      SET sum = sum + row.num;
    END FOR sumNumbers;
    VALUES (sum);
  END;
 25

-- Compare with the much more efficient relational computation:
> SELECT sum(num) FROM range(1, 10) AS t(num) WHERE num % 2 = 1;
 25