SNOWFLAKES DRAWING PAPER
[SQL] MYSQL :: cursor & insert error check example 본문
cursor & insert error check example
소스 설명 : cursor와 삽입시 에러 체크를 이용한
staTest1(table)에 있는 값을 staTest2(table)로 옮기는 예제
----------------------------------------------------------------------------------
Drop procedure if exists sp_rt_sta_set_Test ;
DELIMITER |
CREATE PROCEDURE sp_rt_sta_set_Test()
BEGIN
DECLARE stID int unsigned;
DECLARE stName varchar(20);
DECLARE stValue varchar(20);
DECLARE done int default 0;
DECLARE sta_Temp int default 0;
/* insert시 에러 체크 변수 선언*/
DECLARE errorCode int default 0;
/* 중복된 값입력 등으로 인한 이중키 오류 일 경우 */
DECLARE duplicate_key CONDITION FOR SQLSTATE '23000' ;
DECLARE Cursor cursor for
select st_id_pk, st_name, st_value from staTest1;
/* fetch next할때 마지막 여부를 알려주는 handler 변수(done) */
DECLARE continue handler for sqlstate '02000' set done = 1;
/* insert시 에러 체크 */
DECLARE CONTINUE HANDLER for duplicate_key set errorCode = -1 ;
/* 에러 체크 시작!(when insert) */
START TRANSACTION ;
/* 위의 SQL문 실행 */
open Cursor;
/* 반복 시작*/
repeat
fetch Cursor into stID, stName, stValue;
/* 커서가 마지막이 아니라면.. */
if not done then
BEGIN
insert into staTest2(st2_id_pk, st2_name, st2_value) values (stID, stName, stValue);
/* why?삽입하는 과정에서 done 파일 끝까지 도달하는지 체크하는 변수를 1로 만들어 버림. */
set done = 0;
END ;
end if;
until done end repeat; /* 반복 끝 */
close Cursor;
/* 에러발생시 이전까지의 작업 취소 */
if (errorCode < 0) then
ROLLBACK;
/* 성공시 지금까지의 작업 실행 */
else
COMMIT ;
/* 삽입 성공 여부 에러코드 return */
select errorCode;
end if;
END |
DELIMITER ;
-------------------------------------------------------------------
'개발 > Oracle/SQL/ERD' 카테고리의 다른 글
[SQL] mysql event (0) | 2009.04.18 |
---|---|
[SQL] Mysql - ErrCode (0) | 2009.04.18 |
[SQL] MySQL Trigger (0) | 2009.04.18 |
[SQL] mysqldump (0) | 2009.04.18 |
[SQL] MYSQL :: show table status (0) | 2009.04.18 |