[프로시저 내용]
A테이블에(departments_dev) 접근하여 조회된 값을 커서에 담아서 B테이블(departments_dev2)에 입력하는 프로시저
0. 테스트용 생성 DDL (테스트용이라 간단하게 생성함)
-- departments_dev 생성 (데이터 조회용 테이블)
CREATE TABLE `departments_dev` (
`dept_no` CHAR(4) NOT NULL,
`dept_name` VARCHAR(40) NOT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
insert into departments_dev values('d009','Customer Service');
insert into departments_dev values('d007','Sales'); -- 중복데이터 만큼 입력되는지 확인하기 위해 3번 insert 함
insert into departments_dev values('d007','Sales');
insert into departments_dev values('d007','Sales');
-- departments_dev2 생성 (데이터 입력용 테이블)
CREATE TABLE `departments_dev2` (
`dept_no` CHAR(4) NOT NULL,
`dept_name` VARCHAR(40) NOT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
1. 프로시저 생성
DELIMITER //
-- drop procedure if exists SP_cursor_dev;
create procedure SP_cursor_dev(IN v1 char(4), IN v2 varchar(40)) -- INPUT 값을 받는 프로시저 생성
BEGIN
DECLARE c1 varchar(4);
DECLARE c2 varchar(40);
DECLARE c_Done int default 0;
/* 여기에 커서를 정의 합니다. */
DECLARE mCursor CURSOR FOR
select dept_no,dept_name
from departments_dev
where dept_no=v1
and dept_name=v2;
/* 데이터가 없으면 c_Done에 1 */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET c_Done=-1;
OPEN mCursor;
/* 반복합니다. */
REPEAT
/* 반환된 필드값을 변수에 담습니다. */
FETCH NEXT FROM mCursor INTO c1,c2;
IF NOT c_Done then
/* 수행할 쿼리리 여기에 작성합니다. */
insert into departments_dev2 values(c1,c2);
END IF;
/* c_Done이 1이 될때까지 반복 합니다. */
UNTIL c_Done END REPEAT;
CLOSE mCursor;
select concat('error : ', c_Done); -- 에러코드 출력
END //
DELIMITER ;
2. 프로시저 정상실행
CALL SP_cursor_dev('d007','Sales');
2. 프로시저 에러실행 (존재하지 않는 값)
CALL SP_cursor_dev('d077','Salaa');
3. 프로시저 결과 확인
select * from departments_dev2;
참고
[SP] Cursor 사용 예제 : http://dbguide.tistory.com/entry/SP-Cursor-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C
'Database(DB) > mysql' 카테고리의 다른 글
[mysql] 커서(CORSUR) 간단 예제 (0) | 2018.09.16 |
---|---|
[mysql] 프로시저 예제_2 입력받은 매개변수에 따라 변화하는 값 테이블에 입력하는 프로시저 (0) | 2018.09.15 |
[mysql] 프로시저 예제1 매개변수를 이용한 동적쿼리 생성 프로시저 (0) | 2018.09.12 |
[mysql] 특정 구분자로 합쳐진 데이터 분리하기 (0) | 2018.09.11 |
[mysql] error Table './mysql/user' is marked as crashed and should be repaired (0) | 2018.09.10 |