[[PageOutline]] = MariaDB 복합 SQL문 = 드디어, 프로시저가 아닌 곳에서도 복합 SQL문을 사용할 수 있다. == 형식 == 다음과 같이 BEGIN NOT ATOMIC ... END 구문 안에 복합 SQL문을 적어주면 된다. 트랜잭션을 시작하는 BEGIN과 구별하기 위해서 복합 SQL문을 시작할 때 BEGIN 대신 BEGIN NOT ATOMIC으로 쓰는 점에 주의하자. {{{ DELIMITER // BEGIN NOT ATOMIC --- 여기부터 복합 SQL문을 적어주면 된다. ... END// DELIMITER ; }}} == 예제 == 예를 들어 다음과 같이 사용이 가능하다. 참고로 예제의 ["MariaDB FOR 루프" for 문]은 10.3부터 지원한다. {{{ DELIMITER // BEGIN NOT ATOMIC -- 에러 발생시의 처리 declare exit handler for sqlexception begin -- 에러 갯수 불러옴 get diagnostics @num_conditions = number; for i in 1 .. @num_conditions do get diagnostics condition i @sqlstate = returned_sqlstate, @errno = mysql_errno, @text = message_text; select @sqlstate, @errno, @text; end for; rollback; end; select min(num), max(num) into @min_num, @max_num from switch_trans_json where transtime < '2020-12-01'; for i in @min_num .. @max_num do start transaction; insert into switch_trans_json_backup (num, json) select num, json_compact(json) from switch_trans_json where num = i; delete from switch_trans_json where num = i; commit; end for; END// DELIMITER ; }}} GET DIAGNOSTICS 명령은 가장 최근의 SQL문에서 생성한 다음과 같은 정보를 볼 수 있다. 이 명령은 10.0부터 가능하다. ||항목||TYPE||설명|| ||RETURNED_SQLSTATE||VARCHAR(5)||'00': 성공, '01%': 경고, '02%': NOT FOUND|| ||MYSQL_ERRNO||SMALLINT UNSIGNED||에러 번호. 0은 성공. mysql_errno()로 에러 내용 알 수 있음|| ||MESSAGE_TEXT||VARCHAR(512)|||| ||CONSTRAINT_SCHEMA||VARCHAR(64)||위반한 제약조건이 있는 스키마|| ||CONSTRAINT_NAME||VARCHAR(64)||위반한 제약조건|| ||SCHEMA_NAME||VARCHAR(64)||오류가 발생한 데이터베이스|| ||TABLE_NAME||VARCHAR(64)||실패한 SQL문에서 접근한 테이블|| ||COLUMN_NAME||VARCHAR(64)||실패한 SQL문에서 접근한 컬럼|| ||CURSOR_NAME||VARCHAR(64)||오류가 발생한 커서|| ---- [WikiStart 처음으로]