프로시져가 자꾸 실패합니다... 조금 봐주시길 부탁 드립니다! 0 4 626

by 아니8083 [MySQL] [2019.08.27 15:41:38]


기초적인 프로시져 인데,,, 어디서 틀렸는지를 모르겠습니다.

오라클만 짜다가 와서 그런지... 많은 고수님들의 도움 부탁 드립니다.

 

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;

 

by 마농 [2019.08.27 16:18:28]

MySQL 프로시저 문법은 잘 모르지만...
cur1,cur2 로 되어 있는 부분이 전부 다 이상하네요.
그냥 cur1 으로 바꿔 보세요.


by 아니8083 [2019.08.27 16:40:45]

감사합니다! 그런데 cur1, cur2를 동시에 먹이는 것이 오라클로 짯을 때는 되었었는데,,, mysql 은 안되네요 ㅠㅠ


by 마농 [2019.08.27 16:56:43]

오라클에서는 된다라고요? 그럴 리가 없을텐데요???


by 아니8083 [2019.08.27 19:24:38]

앗,, 그대로 해서는 안 되었구요^^

 

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();

 

이렇게 되었습니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입