본문 바로가기
Data/MySQL

[MySQL] Stored Procedure 반복문 - WHILE / REPEAT / LOOP

by prinha 2021. 1. 8.
728x90
반응형

prinha.tistory.com/entry/MySQL-Stored-Procedure%EC%9D%98-%EC%A1%B0%EA%B1%B4%EB%AC%B8-IF-ELSEIF-CASE

 

[MySQL] Stored Procedure의 조건문 IF ELSEIF / CASE

prinha.tistory.com/entry/MySQL-%EC%A0%80%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80%EC%9D%98-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98-IN-OUT-INOUT [MySQL] 저장 프로시저의 매개변수 - IN, OUT, INOUT pr..

prinha.tistory.com


WHILE

표현식값이 true면 표현식의 값이 false가 될 때까지 실행

WHILE expression DO
	statements
END WHILE

 

USE `classicmodels`;
DROP procedure IF EXISTS `test_mysql_while_loop`;

DELIMITER $$
USE `classicmodels`$$
CREATE PROCEDURE `test_mysql_while_loop` ()
BEGIN
	DECLARE X INT;
    DECLARE STR VARCHAR(255);

	SET X=1;
    SET STR='';
    
    WHILE X <=5 DO
    SET STR = CONCAT(STR,X,',');
    SET X=X+1;
    END WHILE;
    
    SELECT STR;
END$$

DELIMITER ;
CALL TEST_MYSQL_WHILE_LOOP();

 

 

REPEAT

사후 테스트(post-test)반복문으로 실행문을 실행한 후에 표현식 값을 확인

REPEAT
	statements;
UNTIL expression
END REPEAT

 

USE `classicmodels`;
DROP procedure IF EXISTS `test_mysql_repeat_loop`;

DELIMITER $$
USE `classicmodels`$$
CREATE PROCEDURE `test_mysql_repeat_loop` ()
BEGIN
	DECLARE X INT;
    DECLARE STR VARCHAR(355);
    
    REPEAT
		SET X=1;
		SET STR=CONCATE(STR,X,',');
    UNTIL X>5
    END REPEAT;
    
    SELECT STR;
END$$

DELIMITER ;
CALL TEST_MYSQL_REPEAT_LOOP();

 

 

LOOP

LOOP문을 제어할 수 있게하는 2개의 문법 - LEAVE & ITERATE

반복 상태의 코드 구간에서 조금 더 유용성 있게하는  loop label 제공

1) LEAVE
조건을 만족할 때까지 기다리지않고 즉시 반복문을 빠져나갈 수 있게 허용한다.
LEAVE문은 다른 언어에서의 break처럼 작동한다.

2) ITERATE
코드를 전부 실행시키지않고 새로운 반복을 시작하도록한다.
ITERATE문은 다른 언어에서의 continue처럼 작동한다.

 

USE `classicmodels`;
DROP procedure IF EXISTS `test_mysql_loop`;

DELIMITER $$
USE `classicmodels`$$
CREATE PROCEDURE `test_mysql_loop` ()
BEGIN
	DECLARE X INT;
    DECLARE STR VARCHAR(255);
    
    SET X=1;
    SET STR='';
    
    loop_label:LOOP
    
		IF X>10 THEN
			LEAVE loop_label;
		END IF;
		
		SET X=X+1;
		
		IF(X MOD 2) THEN
			ITERATE loop_label;
		ELSE SET STR=CONCAT(STR,X,',');
        END IF;
        
	END LOOP;

	SELECT STR;
END$$

DELIMITER ;
CALL TEST_MYSQL_LOOP();

 


출처 및 참고 : blog.duveen.me/19?category=657591

728x90
반응형