기초적인 프로시져 인데,,, 어디서 틀렸는지를 모르겠습니다.
오라클만 짜다가 와서 그런지... 많은 고수님들의 도움 부탁 드립니다.
CREATE PROCEDURE kt_move_add()
BEGIN
-- 선언 부
DECLARE done INT DEFAULT FALSE;
DECLARE vRowCount INT DEFAULT 0 ;
declare v_etlymd varchar2(10);
declare v_ht varchar2(5);
declare cur1,cur2 cursor for select etl_ymd, ht from cal_1801;
declare continue handler for not found set done = TRUE;
open cur1,cur2;
read_loop: LOOP
fetch cur1 , cur2 into v_etlymd, v_ht;
select done;
insert into 1801T_R select * from 1801T where ETL_YMD = v_etlymd and ht = v_ht;
SET vRowCount = vRowCount+1;
if done then
leave read_loop;
end if;
end loop;
select vRowCount;
CLOSE cur1, cur2;
end;
앗,, 그대로 해서는 안 되었구요^^
create procedure SP_cursor_dev()
BEGIN
DECLARE c1 varchar(10);
DECLARE c2 varchar(4);
DECLARE c_Done int default 0;
/* 여기에 커서를 정의 합니다. */
DECLARE mCursor CURSOR FOR
select etl_ymd, ht
from cal_1801
where etl_ymd between 20180101 and 20180102
;
/* 데이터가 없으면 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 1801T_R select * from 1801T where ETL_YMD = c1 and ht = c2;
END IF;
/* c_Done이 1이 될때까지 반복 합니다. */
UNTIL c_Done END REPEAT;
CLOSE mCursor;
select concat('error : ', c_Done); -- 에러코드 출력
END ;
call SP_cursor_dev();
이렇게 되었습니다!