-- 같은 이름의 프로시저 있으면 삭제
DROP PROCEDURE IF EXISTS cursor_test;
DELIMITER $$
CREATE PROCEDURE cursor_test(
IN val VARCHAR(30) /*파라미터 선언*/
)
BEGIN
/*
* 커서 테스트 1
* CALL cursor_test(3);
*/
-- 반복문 변수선언
DECLARE done int DEFAULT 0;
-- 커서에서 사용할 변수선언
DECLARE vval1, vval2 varchar(30);
DECLARE u_cnt int;
-- 커서에서 사용할 Select 테이블 선언
DEClARE openCursor CURSOR FOR SELECT val1, val2 FROM test1 WHERE val3 <> '' ;
-- 반복문 핸들러 선언
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
-- 임시 테이블 생성
DROP TEMPORARY TABLE IF EXISTS TB_Tmp;
CREATE TEMPORARY TABLE TB_Tmp
(
uid1 varchar(30)
,uid2 varchar(30)
,cnt int
);
SET u_cnt = 1;
-- 커서오픈
OPEN openCursor;
-- 반복문 시작
read_loop: LOOP
-- 커서에서 데이터 가져옴
FETCH openCursor INTO vval1, vval2;
-- 반복문 종료 조건
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO TB_Tmp VALUES(vval1, vval2, u_cnt);
SET u_cnt = u_cnt + 1;
-- 반복문 끝
END LOOP read_loop;
-- 커서해제
CLOSE openCursor;
-- 임시 테이블 출력
SELECT * FROM TB_Tmp ORDER BY cnt DESC;
END$$
DELIMITER ;
-- 프로시저실행
CALL cursor_test(3);
===================================
-- 같은 이름의 프로시저 있으면 삭제
DROP PROCEDURE IF EXISTS cursor_test2;
DELIMITER $$
CREATE PROCEDURE cursor_test2(
IN val VARCHAR(30) /*파라미터 선언*/
)
BEGIN
/*
* 커서 테스트 2
* CALL cursor_test2(3);
*/
-- 반복문 변수선언
DECLARE done INTEGER DEFAULT 0;
-- 커서에서 사용할 변수선언
DECLARE vval1, vval2 varchar(30);
DECLARE u_cnt int;
-- 커서에서 사용할 Select 테이블 선언
DEClARE openCursor CURSOR FOR SELECT val1, val2 FROM test1 WHERE val3 <> '' ;
-- 반복문 핸들러 선언
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
-- 임시 테이블 생성
DROP TEMPORARY TABLE IF EXISTS TB_Tmp;
CREATE TEMPORARY TABLE TB_Tmp
(
uid1 varchar(30)
,uid2 varchar(30)
,cnt int
);
SET u_cnt = 1;
-- 커서오픈
OPEN openCursor;
REPEAT
FETCH NEXT FROM openCursor INTO vval1, vval2;
-- 반복문 종료 조건
IF NOT done THEN
INSERT INTO TB_Tmp VALUES(vval1, vval2, u_cnt);
SET u_cnt = u_cnt + 2;
END IF;
UNTIL done END REPEAT;
-- 커서해제
CLOSE openCursor;
-- 임시 테이블 출력
SELECT * FROM TB_Tmp ORDER BY cnt DESC;
DROP TEMPORARY TABLE TB_Tmp;
END$$
DELIMITER ;
-- 프로시저실행
CALL cursor_test2(3);
'[ 서버 & DB 관련 ] > MySQL' 카테고리의 다른 글
mysql FUNCTION, PROCEDURE 예제 (0) | 2019.05.10 |
---|---|
변수 사용 예 (0) | 2019.05.02 |
group_concat() 한줄로 보이도록 - (0) | 2019.04.25 |
mysql dblink (0) | 2019.04.22 |
Mysql Join에 대한 설명 (0) | 2019.01.21 |