REPEAT (Script Snowflake)¶
Um loop REPEAT
itera até uma condição especificada ser verdadeira. Um loop REPEAT
testa a condição no fim do loop. Isto significa que o corpo de um loop REPEAT
sempre executa pelo menos uma vez.
Para obter mais informações sobre loops, consulte Como trabalhar com loops.
Nota
Este constructo do Script Snowflake só é válido dentro de um bloco do Script Snowflake.
Sintaxe¶
REPEAT
<statement>;
[ <statement>; ... ]
UNTIL ( <condition> )
END REPEAT [ <label> ] ;
Onde:
statement
Uma instrução pode ser qualquer uma das seguintes opções:
Uma única instrução SQL (incluindo CALL).
Uma instrução de fluxo de controle (ex.: instrução de looping ou ramificação).
Um bloco aninhado.
condition
Uma expressão que avalia como um BOOLEAN.
label
Uma tag opcional. Tal tag pode ser um destino de salto para uma instrução BREAK ou CONTINUE. Uma tag deve seguir as regras de nomenclatura para Identificadores de objetos.
Notas de uso¶
Coloque a condição no
REPEAT
entre parênteses. Por exemplo:REPEAT ( <condição> )
.Se o
condition
nunca for avaliado como TRUE, e o loop não tiver um comando BREAK (ou equivalente), então o loop será executado e consumirá créditos indefinidamente.Se
condition
for NULL, então ele será tratado como FALSE.Um loop pode conter múltiplas instruções. Você pode usar um BEGIN … END bloco para conter essas instruções, mas isso não é obrigatório.
Exemplos¶
Este exemplo usa um loop para calcular um poder de 2. (Esta é uma solução ineficiente, mas demonstra o looping).
CREATE PROCEDURE power_of_2()
RETURNS NUMBER(8, 0)
LANGUAGE SQL
AS
$$
DECLARE
counter NUMBER(8, 0); -- Loop counter.
power_of_2 NUMBER(8, 0); -- Stores the most recent power of 2 that we calculated.
BEGIN
counter := 1;
power_of_2 := 1;
REPEAT
power_of_2 := power_of_2 * 2;
counter := counter + 1;
UNTIL (counter > 8)
END REPEAT;
RETURN power_of_2;
END;
$$;
Aqui está o resultado da execução do procedimento armazenado:
CALL power_of_2();
+------------+
| POWER_OF_2 |
|------------|
| 256 |
+------------+