MySQL은 조건에 따라 SQL 코드 블록을 반복적으로 실행할 수 있도록 다양한 루프 문을 제공합니다. 그중 WHILE 루프 문은 가장 널리 사용되는 반복문 중 하나입니다.
WHILE 루프의 기본 문법
WHILE expression DO statements END WHILE
WHILE 루프의 동작 원리
WHILE 루프는 매 반복(iteration)이 시작될 때마다 먼저 조건식(expression)을 검사합니다. 조건식이 참(TRUE)으로 평가되면 MySQL은 WHILE과 END WHILE 사이의 문장들을 실행하고, 조건식이 거짓(FALSE)이 될 때까지 이 과정을 반복합니다.
이처럼 WHILE 루프는 문장을 실행하기 전에 조건을 검사하기 때문에 '사전 검사 루프(pretest loop)'라고도 불립니다. 따라서 처음부터 조건이 거짓이라면 루프 내부의 문장은 한 번도 실행되지 않습니다.
저장 프로시저에서 WHILE 루프 활용 예제
다음 예제는 저장 프로시저 내에서 WHILE 루프를 사용하여 1부터 10까지의 숫자를 쉼표로 구분된 문자열로 만드는 방법을 보여줍니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE While_Loop()
-> BEGIN
-> DECLARE A INT;
-> DECLARE XYZ VARCHAR(50);
-> SET A = 1;
-> SET XYZ = '';
-> WHILE A <= 10 DO
-> SET XYZ = CONCAT(XYZ, A, ',');
-> SET A = A + 1;
-> END WHILE;
-> SELECT XYZ;
-> END //
Query OK, 0 rows affected (0.31 sec)코드 설명
DECLARE A INT;: 카운터로 사용할 정수형 변수 A를 선언합니다.DECLARE XYZ VARCHAR(50);: 결과 문자열을 저장할 변수 XYZ를 선언합니다.WHILE A <= 10 DO ... END WHILE;: A가 10 이하인 동안 반복하며, 각 회차마다 CONCAT 함수로 숫자와 쉼표를 문자열에 추가하고 A 값을 1씩 증가시킵니다.
프로시저 호출 및 실행 결과
생성된 저장 프로시저를 호출하면 아래와 같은 결과를 확인할 수 있습니다.
mysql> DELIMITER ; mysql> CALL While_Loop(); +-----------------------+ | XYZ | +-----------------------+ | 1,2,3,4,5,6,7,8,9,10, | +-----------------------+ 1 row in set (0.03 sec)
이처럼 WHILE 루프는 저장 프로시저 안에서 특정 조건이 충족될 때까지 반복 작업을 수행해야 하는 경우에 매우 유용하게 활용할 수 있습니다.