반응형
17.2.10. 플로우 컨트롤(Flow Control) 구성
17.2.10.1. IF 명령문
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
IF 문장은 기본적인 조건문을 제공한다. 만일search_condition 의 조건에 맞으면, 이에 대응하는 SQL명령문 리스트가 실행된다. 만일 search_condition 의 조건이 일치하지 않으면, ELSE 구문에 있는 명령문 리스트가 실행된다. 각 statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
Note: 또한, IF() 함수가 있는데, 여기에서 기술한 IF 명령문과 다른 형태로서, Section 12.2, “Control Flow Functions”를 참조하기 바람.
17.2.10.2. CASE 명령문
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Or:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
스토어드 루틴에 대한CASE 명령문은 복합 조건문 구성을 실행한다. 만일 search_condition 의 조건이 일치하면, 이에 대응하는 SQL 명령문 리스트가 실행된다. 만일 일치하는 조건이 없는 경우에는, ELSE구문에 있는 명령문 리스트가 실행된다. 각 statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
Note: 스토어드 루틴 내에서 사용하기 위한 CASE statement 의 신텍스는 Section 12.2, “Control Flow Functions”에서 다루는 SQL CASE expression과는 약간 다른 형태이다. CASE 명령문은 ELSE NULL 구문을 가질 수 없으며, 또한 END 대신에 END CASE로 종료를 시킨다.
17.2.10.3. LOOP 명령문
[begin_label:] LOOP
statement_list
END LOOP [end_label]
LOOP 는 단일 루프 구성을 형성하고, 명령문의 반복 실행을 가능하게 해주며, 한 개 또는 그 이상의 명령문으로 구성 되어진다. 루프안에 있는 명령문은 루프가 종료되기 전까지 계속 반복 실행을 한다; 일반적으로 이 명령문은 LEAVE 명령문과 함께 실행된다.
LOOP 명령문은 레이블화 시킬 수 있고, end_label 는 begin_label 을 표시한 후에 작성해야 한다. 양쪽 모두 표시할 때에는 동일한 이름을 사용해야 한다.
17.2.10.4. LEAVE 명령문
LEAVE label
이 명령문은 모든 레이블화된 플로우 제어 구성문을 빠져 나올 때 사용하는 명령문이다. 이것은 BEGIN ... END , 또는 루프 구성문(LOOP, REPEAT, WHILE)안에서도 사용 가능하다.
17.2.10.5. ITERATE 명령문
ITERATE label
ITERATE 는 LOOP, REPEAT, 및 WHILE 명령문안에서만 사용할 수 있다. ITERATE 는 “루프를 다시 실행(do the loop again)”의 의미이다.
예제:
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SET @x = p1;
END
17.2.10.6. REPEAT 명령문
[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]
REPEAT 명령문 내에 있는 명령문 리스트는 search_condition 의 조건이 일치하는 동안 반복적으로 실행된다. 따라서, REPEAT 는 항상 적어도 한번은 루프 안에 표현되어야 한다. statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
REPEAT명령문은 레이블화 될 수 있다. end_label 는 begin_label 과 함께 표시되어야 한다. 양쪽 모두는 동일한 이름으로 표시되어야 한다.
예제:
mysql> delimiter //
mysql> CREATE PROCEDURE dorepeat(p1 INT)
-> BEGIN
-> SET @x = 0;
-> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> CALL dorepeat(1000)//
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x//
+------+
| @x |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)
17.2.10.7. WHILE 명령문
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
The statement list within a WHILE 명령문 내에 있는 명령문 리스트는 search_condition 조건이 일치하는 동안 반복적으로 실행된다. statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
WHILE 명령문은 레이블화할 수 있다. end_label 은 begin_label 과 함께 표시되어야 하고, 양쪽은 모두 동일한 이름을 사용하여야 한다.
예제:
CREATE PROCEDURE dowhile()
BEGIN
DECLARE v1 INT DEFAULT 5;
WHILE v1 > 0 DO
...
SET v1 = v1 - 1;
END WHILE;
END
IF, CASE, LOOP, WHILE, REPLACE ITERATE, 및 LEAVE 구성문은 모두 실행할 수 있다.
대부분의 이러한 구성문은 다른 명령문을 포함하고 있는데, 아래의 색션에서 열거하는 문법에 의해 구성 되어진다. 이런 구성문들은 네스티드(nested)될 수 있다. 예를 들면, 하나의 IF 명령문은 WHILE 루프를 포함할 수 있고, 이 루프는 자체적으로 CASE 명령문을 가질 수 있다.
FOR는 아직 지원되지 않는다.
17.2.10.1. IF 명령문
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
IF 문장은 기본적인 조건문을 제공한다. 만일search_condition 의 조건에 맞으면, 이에 대응하는 SQL명령문 리스트가 실행된다. 만일 search_condition 의 조건이 일치하지 않으면, ELSE 구문에 있는 명령문 리스트가 실행된다. 각 statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
Note: 또한, IF() 함수가 있는데, 여기에서 기술한 IF 명령문과 다른 형태로서, Section 12.2, “Control Flow Functions”를 참조하기 바람.
17.2.10.2. CASE 명령문
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Or:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
스토어드 루틴에 대한CASE 명령문은 복합 조건문 구성을 실행한다. 만일 search_condition 의 조건이 일치하면, 이에 대응하는 SQL 명령문 리스트가 실행된다. 만일 일치하는 조건이 없는 경우에는, ELSE구문에 있는 명령문 리스트가 실행된다. 각 statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
Note: 스토어드 루틴 내에서 사용하기 위한 CASE statement 의 신텍스는 Section 12.2, “Control Flow Functions”에서 다루는 SQL CASE expression과는 약간 다른 형태이다. CASE 명령문은 ELSE NULL 구문을 가질 수 없으며, 또한 END 대신에 END CASE로 종료를 시킨다.
17.2.10.3. LOOP 명령문
[begin_label:] LOOP
statement_list
END LOOP [end_label]
LOOP 는 단일 루프 구성을 형성하고, 명령문의 반복 실행을 가능하게 해주며, 한 개 또는 그 이상의 명령문으로 구성 되어진다. 루프안에 있는 명령문은 루프가 종료되기 전까지 계속 반복 실행을 한다; 일반적으로 이 명령문은 LEAVE 명령문과 함께 실행된다.
LOOP 명령문은 레이블화 시킬 수 있고, end_label 는 begin_label 을 표시한 후에 작성해야 한다. 양쪽 모두 표시할 때에는 동일한 이름을 사용해야 한다.
17.2.10.4. LEAVE 명령문
LEAVE label
이 명령문은 모든 레이블화된 플로우 제어 구성문을 빠져 나올 때 사용하는 명령문이다. 이것은 BEGIN ... END , 또는 루프 구성문(LOOP, REPEAT, WHILE)안에서도 사용 가능하다.
17.2.10.5. ITERATE 명령문
ITERATE label
ITERATE 는 LOOP, REPEAT, 및 WHILE 명령문안에서만 사용할 수 있다. ITERATE 는 “루프를 다시 실행(do the loop again)”의 의미이다.
예제:
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SET @x = p1;
END
17.2.10.6. REPEAT 명령문
[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]
REPEAT 명령문 내에 있는 명령문 리스트는 search_condition 의 조건이 일치하는 동안 반복적으로 실행된다. 따라서, REPEAT 는 항상 적어도 한번은 루프 안에 표현되어야 한다. statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
REPEAT명령문은 레이블화 될 수 있다. end_label 는 begin_label 과 함께 표시되어야 한다. 양쪽 모두는 동일한 이름으로 표시되어야 한다.
예제:
mysql> delimiter //
mysql> CREATE PROCEDURE dorepeat(p1 INT)
-> BEGIN
-> SET @x = 0;
-> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> CALL dorepeat(1000)//
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x//
+------+
| @x |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)
17.2.10.7. WHILE 명령문
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
The statement list within a WHILE 명령문 내에 있는 명령문 리스트는 search_condition 조건이 일치하는 동안 반복적으로 실행된다. statement_list 는 한 개 또는 그 이상의 명령문으로 구성된다.
WHILE 명령문은 레이블화할 수 있다. end_label 은 begin_label 과 함께 표시되어야 하고, 양쪽은 모두 동일한 이름을 사용하여야 한다.
예제:
CREATE PROCEDURE dowhile()
BEGIN
DECLARE v1 INT DEFAULT 5;
WHILE v1 > 0 DO
...
SET v1 = v1 - 1;
END WHILE;
END
IF, CASE, LOOP, WHILE, REPLACE ITERATE, 및 LEAVE 구성문은 모두 실행할 수 있다.
대부분의 이러한 구성문은 다른 명령문을 포함하고 있는데, 아래의 색션에서 열거하는 문법에 의해 구성 되어진다. 이런 구성문들은 네스티드(nested)될 수 있다. 예를 들면, 하나의 IF 명령문은 WHILE 루프를 포함할 수 있고, 이 루프는 자체적으로 CASE 명령문을 가질 수 있다.
FOR는 아직 지원되지 않는다.
반응형