LOOP(Snowflake Scripting)ยถ
LOOP
๋ฃจํ๋ ๋ฐ๋ณต ํ์๋ ์ข
๋ฃ ์กฐ๊ฑด์ ์ง์ ํ์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ๋ฃจํ ๋ด์์ BREAK ๋๋ RETURN ์ ์ฌ์ฉํ์ฌ ๋ช
์์ ์ผ๋ก ๋ฃจํ๋ฅผ ์ข
๋ฃํด์ผ ํฉ๋๋ค.
๋ฃจํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฃจํ ์์ ํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฐธ๊ณ
์ด Snowflake Scripting ๊ตฌ๋ฌธ์ Snowflake Scripting ๋ธ๋ก ๋ด์์๋ง ์ ํจํฉ๋๋ค.
๊ตฌ๋ฌธยถ
LOOP
<statement>;
[ <statement>; ... ]
END LOOP [ <label> ] ;
์ฌ๊ธฐ์:
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;
$$
;
๋ค์์ ์ ์ฅ ํ๋ก์์ ๋ฅผ ์คํํ ๊ฒฐ๊ณผ์ ๋๋ค.
CALL break_out_of_loop();
+-------------------+
| BREAK_OUT_OF_LOOP |
|-------------------|
| 6 |
+-------------------+
์ ์ฅ ํ๋ก์์ ๋ฅผ ํธ์ถํ ํ ํ ์ด๋ธ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT *
FROM dummy_data
ORDER BY ID;
+----+
| ID |
|----|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----+