'mysql case when'에 해당되는 글 1건

  1. 2016.05.19 [Mysql] 제어문
MySQL2016.05.19 00:40

 

제어문은 스토어드 프로그램의 BEGIN… END 블록 내부에서만 사용될 수 있다.

   

IF … ELSEIF … ELSE … END IF

DELIMITER ;;
 

DROP FUNCTION IF EXISTS sf_greatest;;


CREATE FUNCTION sf_greatest(p_value1 INT, p_value2 INT)
RETURNS INT
BEGIN
IF p_value1 IS NULL THEN
RETURN p_value2;
ELSEIF p_value2 IS NULL THEN
RETURN p_value1;
ELSEIF p_value1 >= p_value2 THEN
RETURN p_value1;
ELSE
RETURN p_value2;
END IF;
END;;

DELIMITER ;

※ END IF 뒤에는 문장의 종료 표시(;)가 필요하다.

   

CASE WHEN … TEHN … ELSE … END CASE

DELIMITER ;;

DROP FUNCTION IF EXISTS sf_greatest1;;

CREATE FUNCTION sf_greatest1(p_value1 INT, p_value2 INT)
RETURNS INT
BEGIN
CASE WHEN p_value1 IS NULL THEN
RETURN p_value2;
WHEN p_value2 IS NULL THEN
RETURN p_value1;
WHEN p_value1 >= p_value2 THEN
RETURN p_value1;
ELSE
RETURN p_value2;
END CASE;
END

DELIMITER ;

※ CASE WHEN 구문도 END CASE로 종료하며 마지막에 문장 종료 표시(;)가 필요하다.

   

반복 루프

1. LOOP

- 반복 비교 조건이 없고 무한 루프를 실행한다는 점에 주의해야 한다.

- LOOP를 벗어나고자 할 때는 LEAVE 명령을 사용한다.

DELIMITER ;;

DROP FUNCTION IF EXISTS sf_factorial1;;

CREATE FUNCTION sf_factorial1 (p_max INT)
RETURNS INT
 

BEGIN

DECLARE v_factorial INT DEFAULT 1;

   

factorial_loop : LOOP

SET v_factorial = v_factorial * p_max;

SET p_max = p_max - 1;

IF p_max <= 1 THEN

LEAVE factorial_loop;

END IF;

END LOOP;

RETURN v_factorial;

END;;

DELIMITER ;

   

2. REPEAT

- 일단 반복 처리 내용을 실행한 다음, 반복 처리를 실행할지 멈출지를 판단

- UNTIL의 조건 식을 비교해 조건 값이 FALSE인 동안 루프 실행

DELIMITER ;;

DROP FUNCTION IF EXISTS sf_factorial2;;
CREATE FUNCTION sf_factorial2 (p_max INT)
RETURNS INT
BEGIN
DECLARE v_factorial INT DEFAULT 1;
REPEAT
SET v_factorial = v_factorial * p_max;
SET p_max = p_max - 1;
UNTIL p_max <= 1
END REPEAT;
 

RETURN v_factorial;
END;;

DELIMITER ;

   

3. WHILE

- 조건 식이 TRUE인 동안 반복해서 실행 한다.

DELIMITER ;;

DROP FUNCTION IF EXISTS sf_factorial3;;
CREATE FUNCTION sf_factorial3(p_max INT)
RETURNS INT
BEGIN

DECLARE v_factorial INT DEFAULT 1;
 

WHILE p_max > 1 DO
SET v_factorial = v_factorial * p_max;
SET p_max = p_max - 1;

END WHILE;

   

RETURN v_factorial;

END;;
DELIMITER ;

 

신고

'MySQL' 카테고리의 다른 글

Can't connect to local MySQL server through socket '/tmp/mysql.sock'  (1) 2016.05.19
[Mysql] 변수  (0) 2016.05.19
[Mysql] 제어문  (0) 2016.05.19
[Mysql] 스토어드 함수  (0) 2016.05.17
[Mysql] 스토어드 프로시저  (0) 2016.05.17
[Mysql] 실행계획2  (1) 2015.05.15
Posted by TM ~ing