| | 1 | [[PageOutline]] |
| | 2 | = MariaDB FOR 루프 = |
| | 3 | https://mariadb.com/kb/en/for/ |
| | 4 | |
| | 5 | MariaDB 10.3부터 지원한다. |
| | 6 | |
| | 7 | FOR를 쓰면 다음과 같이 지정한 정수의 최소값에서 최대값 범위까지 SQL문을 반복할 수 있다. |
| | 8 | {{{ |
| | 9 | create table t1 (a int); |
| | 10 | |
| | 11 | DELIMITER // |
| | 12 | BEGIN NOT ATOMIC |
| | 13 | |
| | 14 | FOR i IN 1 .. 3 |
| | 15 | DO |
| | 16 | insert into t1 values (i); |
| | 17 | END FOR; |
| | 18 | |
| | 19 | END// |
| | 20 | DELIMITER ; |
| | 21 | }}} |
| | 22 | |
| | 23 | FOR문 하나만 있다면 BEGIN NOT ATOMIC ... END를 생략해서 다음과 같이 간략하게 사용할 수도 있다. |
| | 24 | {{{ |
| | 25 | create or replace table t1 (a int); |
| | 26 | |
| | 27 | DELIMITER // |
| | 28 | |
| | 29 | FOR i IN 1 .. 3 |
| | 30 | DO |
| | 31 | insert into t1 values (i); |
| | 32 | END FOR; |
| | 33 | |
| | 34 | // |
| | 35 | DELIMITER ; |
| | 36 | }}} |
| | 37 | |
| | 38 | 반대방향으로도 가능하다. |
| | 39 | {{{ |
| | 40 | create or replace table t1 (a int); |
| | 41 | |
| | 42 | DELIMITER // |
| | 43 | FOR i IN REVERSE 4 .. 12 |
| | 44 | DO |
| | 45 | insert into t1 values (i); |
| | 46 | END FOR; |
| | 47 | // |
| | 48 | DELIMITER ; |
| | 49 | |
| | 50 | select * from t1; |
| | 51 | +------+ |
| | 52 | | a | |
| | 53 | +------+ |
| | 54 | | 12 | |
| | 55 | | 11 | |
| | 56 | | 10 | |
| | 57 | | 9 | |
| | 58 | | 8 | |
| | 59 | | 7 | |
| | 60 | | 6 | |
| | 61 | | 5 | |
| | 62 | | 4 | |
| | 63 | +------+ |
| | 64 | }}} |
| | 65 | |
| | 66 | 정수만 가능한 것은 아니다. 다음과 같이 커서도 가능하다. 커서를 미리 open할 필요는 없다. |
| | 67 | |
| | 68 | {{{ |
| | 69 | create or replace table t1 (b char(1)); |
| | 70 | |
| | 71 | insert into t1 values ('a'),('b'),('c'),('d'),('e'); |
| | 72 | |
| | 73 | DELIMITER // |
| | 74 | BEGIN NOT ATOMIC |
| | 75 | |
| | 76 | declare cur1 cursor for select * from t1; |
| | 77 | |
| | 78 | FOR c IN cur1 |
| | 79 | DO |
| | 80 | delete from t1 where b = c.b; |
| | 81 | END FOR; |
| | 82 | |
| | 83 | END// |
| | 84 | DELIMITER ; |
| | 85 | |
| | 86 | select * from t1; |
| | 87 | }}} |
| | 88 | |
| | 89 | 다음과 같이 커서를 선언하지 않고 쓰는 것이 더 편하다. |
| | 90 | {{{ |
| | 91 | create or replace table t1 (b char(1)); |
| | 92 | |
| | 93 | insert into t1 values ('a'),('b'),('c'),('d'),('e'); |
| | 94 | |
| | 95 | DELIMITER // |
| | 96 | |
| | 97 | FOR c IN (select * from t1) |
| | 98 | DO |
| | 99 | delete from t1 where b = c.b; |
| | 100 | END FOR; |
| | 101 | |
| | 102 | // |
| | 103 | DELIMITER ; |
| | 104 | |
| | 105 | select * from t1; |
| | 106 | }}} |
| | 107 | |
| | 108 | ---- |
| | 109 | [WikiStart 처음으로] |