WHILE(Snowflake Scripting)

WHILE 루프는 지정된 조건이 true인 동안 반복됩니다.

루프에 대한 자세한 내용은 루프 작업하기 섹션을 참조하십시오.

참고

Snowflake Scripting 구문은 Snowflake Scripting 블록 내에서만 유효합니다.

참고 항목:

BREAK, CONTINUE

구문

WHILE ( <condition> ) { DO | LOOP }
    <statement>;
    [ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
Copy

여기서:

condition

BOOLEAN으로 평가되는 식입니다.

statement

문은 다음 중 하나일 수 있습니다.

  • 단일 SQL 문(CALL 포함).

  • 제어 흐름 문(예: 루핑 또는 분기 문).

  • 중첩 블록.

label

선택적 레이블입니다. 이러한 레이블은 BREAK 또는 CONTINUE 문의 이동 대상일 수 있습니다. 레이블은 오브젝트 식별자 의 명명 규칙을 따라야 합니다.

사용법 노트

  • WHILE 에서 조건을 괄호로 묶습니다. 예: WHILE ( <조건> ).

  • condition 이 FALSE로 평가되지 않고 루프에 BREAK(Snowflake Scripting) 명령(또는 이와 동등한 항목)이 포함되어 있지 않은 경우, 루프가 실행되고 크레딧을 무기한으로 소모합니다.

  • condition 이 NULL이면 FALSE로 처리됩니다.

  • 루프는 여러 문을 포함할 수 있습니다. 이러한 문을 포함하는 BEGIN … END 블록 을 사용할 수 있지만, 반드시 사용해야 하는 것은 아닙니다.

  • 키워드 DOEND WHILE 과 쌍을 이루고 키워드 LOOPEND LOOP 와 쌍을 이루어야 합니다. 예:

    while (...) do
        ...
    end while;
    
    while (...) loop
        ...
    end loop;
    
    Copy

이 예에서는 루프를 사용하여 2의 거듭제곱을 계산합니다. (이는 비효율적인 솔루션이지만, 루핑을 보여줍니다.)

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;
    WHILE (counter <= 8) DO
        power_of_2 := power_of_2 * 2;
        counter := counter + 1;
    END WHILE;
    RETURN power_of_2;
END;
$$
;
Copy

다음은 저장 프로시저를 실행한 결과입니다.

CALL power_of_2();
+------------+
| POWER_OF_2 |
|------------|
|        256 |
+------------+
Copy