Changes between Initial Version and Version 1 of MariaDB 복합 SQL문


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

Legend:

Unmodified
Added
Removed
Modified
  • MariaDB 복합 SQL문

    v1 v1  
     1[[PageOutline]]
     2= MariaDB 복합 SQL문 =
     3
     4드디어, 프로시저가 아닌 곳에서도 복합 SQL문을 사용할 수 있다.
     5
     6
     7== 형식 ==
     8
     9다음과 같이 BEGIN NOT ATOMIC ... END 구문 안에 복합 SQL문을 적어주면 된다. 트랜잭션을 시작하는 BEGIN과 구별하기 위해서 복합 SQL문을 시작할 때 BEGIN 대신 BEGIN NOT ATOMIC으로 쓰는 점에 주의하자.
     10{{{
     11DELIMITER //
     12BEGIN NOT ATOMIC
     13
     14    --- 여기부터 복합 SQL문을 적어주면 된다.
     15    ...
     16
     17END//
     18DELIMITER ;
     19}}}
     20
     21== 예제 ==
     22
     23예를 들어 다음과 같이 사용이 가능하다. 참고로 예제의 ["MariaDB FOR 루프" for 문]은 10.3부터 지원한다.
     24{{{
     25DELIMITER //
     26BEGIN NOT ATOMIC
     27
     28    -- 에러 발생시의 처리
     29    declare exit handler for sqlexception
     30    begin
     31
     32        -- 에러 갯수 불러옴
     33        get diagnostics @num_conditions = number;
     34
     35        for i in 1 .. @num_conditions
     36        do
     37            get diagnostics condition i @sqlstate = returned_sqlstate,
     38                @errno = mysql_errno, @text = message_text;
     39           
     40            select @sqlstate, @errno, @text;
     41
     42        end for;
     43
     44        rollback;
     45
     46    end;
     47   
     48    select min(num), max(num) into @min_num, @max_num
     49        from switch_trans_json where transtime < '2020-12-01';
     50       
     51    for i in @min_num .. @max_num
     52    do
     53        start transaction;
     54       
     55            insert into switch_trans_json_backup (num, json)
     56                select num, json_compact(json) from switch_trans_json where num = i;
     57               
     58            delete from switch_trans_json where num = i;
     59       
     60        commit;
     61
     62    end for;
     63
     64END//
     65DELIMITER ;
     66}}}
     67
     68GET DIAGNOSTICS 명령은 가장 최근의 SQL문에서 생성한 다음과 같은 정보를 볼 수 있다. 이 명령은 10.0부터 가능하다.
     69||항목||TYPE||설명||
     70||RETURNED_SQLSTATE||VARCHAR(5)||'00': 성공, '01%': 경고, '02%': NOT FOUND||
     71||MYSQL_ERRNO||SMALLINT UNSIGNED||에러 번호. 0은 성공. mysql_errno()로 에러 내용 알 수 있음||
     72||MESSAGE_TEXT||VARCHAR(512)||||
     73||CONSTRAINT_SCHEMA||VARCHAR(64)||위반한 제약조건이 있는 스키마||
     74||CONSTRAINT_NAME||VARCHAR(64)||위반한 제약조건||
     75||SCHEMA_NAME||VARCHAR(64)||오류가 발생한 데이터베이스||
     76||TABLE_NAME||VARCHAR(64)||실패한 SQL문에서 접근한 테이블||
     77||COLUMN_NAME||VARCHAR(64)||실패한 SQL문에서 접근한 컬럼||
     78||CURSOR_NAME||VARCHAR(64)||오류가 발생한 커서||
     79
     80----
     81[WikiStart 처음으로]