LOOP(Snowflake Scripting)ยถ

LOOP ๋ฃจํ”„๋Š” ๋ฐ˜๋ณต ํšŸ์ˆ˜๋‚˜ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ฃจํ”„ ๋‚ด์—์„œ BREAK ๋˜๋Š” RETURN ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฃจํ”„์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฃจํ”„ ์ž‘์—…ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ 

์ด Snowflake Scripting ๊ตฌ๋ฌธ์€ Snowflake Scripting ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ:

BREAK, CONTINUE, RETURN

๊ตฌ๋ฌธยถ

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

์—ฌ๊ธฐ์„œ:

statement

๋ฌธ์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

label

์„ ํƒ์  ๋ ˆ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ ˆ์ด๋ธ”์€ BREAK ๋˜๋Š” CONTINUE ๋ฌธ์˜ ์ด๋™ ๋Œ€์ƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด๋ธ”์€ ์˜ค๋ธŒ์ ํŠธ ์‹๋ณ„์ž ์˜ ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • LOOP ๋Š” BREAK ๋˜๋Š” RETURN ์ด ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. BREAK ๋˜๋Š” RETURN ๋ช…๋ น์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์กฐ๊ฑด์‹(์˜ˆ: IF ๋˜๋Š” CASE) ์•ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฃจํ”„๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์„ ํฌํ•จํ•˜๋Š” BEGIN โ€ฆ END ๋ธ”๋ก ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆยถ

์ด ๋ฃจํ”„๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ์€ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

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

์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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