LOOP (Script Snowflake)

Um loop LOOP não especifica uma série de iterações ou uma condição de término. O usuário deve sair explicitamente do loop usando BREAK ou RETURN dentro do loop.

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.

Consulte também

BREAK, CONTINUE, RETURN

Sintaxe

LOOP
    <statement>;
    [ <statement>; ... ]
END LOOP [ <label> ] ;
Copy

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.

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

  • O LOOP se repete até que um BREAK ou RETURN seja executado. O comando BREAK ou RETURN está quase sempre dentro de uma expressão condicional (por exemplo, IF ou CASE).

  • 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 loop insere dados de teste previsíveis em uma tabela:

CREATE TABLE dummy_data (ID INTEGER);

CREATE PROCEDURE break_out_of_loop()
RETURNS INTEGER
LANGUAGE SQL
AS
$$
    DECLARE
        counter INTEGER;
    BEGIN
        counter := 0;
        LOOP
            counter := counter + 1;
            IF (counter > 5) THEN
                BREAK;
            END IF;
            INSERT INTO dummy_data (ID) VALUES (:counter);
        END LOOP;
        RETURN counter;
    END;
$$
;
Copy

Aqui está o resultado da execução do procedimento armazenado:

CALL break_out_of_loop();
+-------------------+
| BREAK_OUT_OF_LOOP |
|-------------------|
|                 6 |
+-------------------+
Copy

Aqui está o conteúdo da tabela após chamar o procedimento armazenado:

SELECT *
    FROM dummy_data
    ORDER BY ID;
+----+
| ID |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
+----+
Copy