- 커서와 Loop 문을 이용한 반복 데이터 조회
CREATE PROCEDURE HOME000.check_wrong()
BEGIN
DECLARE done INTEGER DEFAULT 0;
DECLARE v_tid varchar(8);
DECLARE v_ins INT;
DECLARE v_sch INT;
DECLARE v_count INT DEFAULT -1;
DECLARE idList VARCHAR(100);
DECLARE chk_cursor CURSOR FOR
SELECT id, RIGHT(ins_name,2) AS insN, RIGHT(schema_name,3) AS schN from tmp_result tr
where tr.id in (select id from tmp_result group by id having count(id) > 1);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DROP TABLE IF EXISTS tmp_wrong_db;
CREATE TABLE tmp_wrong_db (
tid VARCHAR(8) COMMENT 'tid',
nid BIGINT,
nserver INT COMMENT '현재 서버 index',
ndatabase INT COMMENT '현재 DB index',
rserver INT COMMENT '맞는 서버 index',
rdatabase INT COMMENT '맞는 서버 index'
);
OPEN chk_cursor;
getLocation: LOOP
FETCH chk_cursor INTO v_tid, v_ins, v_sch;
SET v_count = v_count + 1;
IF done = 1 THEN
LEAVE getLocation;
END IF;
SET idlist = concat('\'',v_tid,'\',',v_ins,',',v_sch);
SET @V_SQL = CONCAT('call HOME000.tmp_chk_right_db(',idlist,')');
PREPARE STMT FROM @V_SQL;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
END LOOP getLocation;
CLOSE chk_cursor;
END
- 프로시저 안에서 다른 프로시저를 호출하는데, 해당 프로시저는 개별적인 변수를 받아서 하나의 값만 보여준다.
- 해당 프로시저의 변수를 커서와 loop를 통해 반복