| Version 1 (modified by , 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.
