wiki:MariaDB FOR 루프

Version 1 (modified by yongwoo, 4 weeks ago) ( diff )

MariaDB FOR 루프

https://mariadb.com/kb/en/for/

MariaDB 10.3부터 지원한다.

FOR를 쓰면 다음과 같이 지정한 정수의 최소값에서 최대값 범위까지 SQL문을 반복할 수 있다.

create table t1 (a int);

DELIMITER //
BEGIN NOT ATOMIC

    FOR i IN 1 .. 3
    DO
        insert into t1 values (i);
    END FOR;

END//
DELIMITER ;

FOR문 하나만 있다면 BEGIN NOT ATOMIC … END를 생략해서 다음과 같이 간략하게 사용할 수도 있다.

create or replace table t1 (a int);

DELIMITER //

    FOR i IN 1 .. 3
    DO
        insert into t1 values (i);
    END FOR;

//
DELIMITER ;

반대방향으로도 가능하다.

create or replace table t1 (a int);

DELIMITER //
FOR i IN REVERSE 4 .. 12
DO
    insert into t1 values (i);
END FOR;
//
DELIMITER ;

select * from t1;
+------+
| a    |
+------+
|   12 |
|   11 |
|   10 |
|    9 |
|    8 |
|    7 |
|    6 |
|    5 |
|    4 |
+------+

정수만 가능한 것은 아니다. 다음과 같이 커서도 가능하다. 커서를 미리 open할 필요는 없다.

create or replace table t1 (b char(1));

insert into t1 values ('a'),('b'),('c'),('d'),('e');

DELIMITER //
BEGIN NOT ATOMIC

    declare cur1 cursor for select * from t1;

    FOR c IN cur1
    DO
        delete from t1 where b = c.b;
    END FOR;

END//
DELIMITER ;

select * from t1;

다음과 같이 커서를 선언하지 않고 쓰는 것이 더 편하다.

create or replace table t1 (b char(1));

insert into t1 values ('a'),('b'),('c'),('d'),('e');

DELIMITER //

    FOR c IN (select * from t1)
    DO
        delete from t1 where b = c.b;
    END FOR;

//
DELIMITER ;

select * from t1;

처음으로

Note: See TracWiki for help on using the wiki.