저장 프로세스 세 가지 순환(while,repeat,loop), 점프 순환 설명 및 예제

2441 단어 MYSQL 개발 학습
while 순환
[begin_label:] WHILE search_condition

                        DO statement_list; 
                END WHILE [end_label];

조건이 성립되었는지 판단하고, 성립되면 SQL 문장을 집행하며, 조건이 성립되지 않으면 퇴출한다
1. 조건, 반드시 사순환을 피한다!!!!
2. SQL 문체
3. 프로그램체 안에서 조건 변수를 처리해야 한다------조건이 바뀌어야 한다. 그렇지 않으면 사순환이 된다.
 
repeat 주기
[begin_label:] REPEAT
                    statement_list;
                UNTIL search_condition END REPEAT [end_label];

먼저 SQL 문장을 실행하고 판단 조건에서 until 조건이 성립되면 순환을 끝냅니다
 
 
 
loop 루프
루프 사이에 종료(leave)가 있어야 합니다.
숨겨진 판단 조건 없음
 
 
 
leave(전체 순환체 건너뛰기)
LEAVE can be used within BEGIN ... END or loop constructs (LOOP, REPEAT, WHILE).
 
예:
DELIMITER $$

CREATE PROCEDURE small_exit(OUT p1 INT,OUT p2 INT)

BEGIN

SET p1=1;

SET p2=2;

block1:BEGIN

            LEAVE block1;------------    block1,          

            SET p2=3;

        END block1;

SET p1=4;

END $$

DELIMITER ;


CALL small_exit(@p1,@p2);

SELECT @p1;

SELECT @p2;

 
mysql> SELECT @p1;

+------+

| @p1 |

+------+

| 4 |

+------+

1 row in set (0.00 sec)



mysql> SELECT @p2;

+------+

| @p2 |

+------+

| 2 |

+------+


 
ITERATE(이번 순환에서 벗어나 다음 순환을 계속함)
ITERATE can appear only within LOOP, REPEAT, and WHILE statements. ITERATE means “start the loop again.”
그러나 전체 순환을 끝내야 하고, leave도 필요하다.
 
 
 
 
 
예제:
1. 누적된 시작값으로 임의의 수치를 입력한다.
2. 누적된 횟수를 나타내는 숫자 값을 입력합니다.
3. 요구 사항:
이 시작값부터 연속적으로 누적되며 누적된 횟수는 입력한 두 번째 변수이다.누적된 수치는 무작위로 생성된 임의의 값이다.
repeat로 실현하기;
4. 예:
call proc_name(123,3);
누적된 합: 123+랜덤수 1+랜덤수 2+랜덤수 3
DROP PROCEDURE IF EXISTS sum2_proc;

DELIMITER $$
CREATE PROCEDURE sum2_proc(IN zhong_num FLOAT(6),IN act_num INT)
BEGIN
	DECLARE i INT DEFAULT 0; --     
	WHILE i<4  --         
	DO	
		SET i=i+1;
		SET zhong_num=zhong_num+RAND();
	
	END WHILE;
	
	SELECT zhong_num,i;	
END $$

DELIMITER ;

CALL sum2_proc(123,4);
DROP PROCEDURE IF EXISTS sum1_proc;

DELIMITER $$
CREATE PROCEDURE sum1_proc(IN zhong_num FLOAT,IN act_num INT)
BEGIN
	DECLARE i INT DEFAULT 0;
	--     
	REPEAT		
		SET i=i+1;
		SET zhong_num=zhong_num+RAND();
	UNTIL i=act_num --       
	END REPEAT;
	
	SELECT zhong_num,i;
		
END $$

DELIMITER ;

CALL sum1_proc(123,4);

좋은 웹페이지 즐겨찾기