Changes between Initial Version and Version 1 of MariaDB FOR 루프


Ignore:
Timestamp:
Nov 11, 2025, 6:18:08 PM (4 weeks ago)
Author:
yongwoo
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • MariaDB FOR 루프

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