2016-09-23 2 views
0

MYSQL에서 커서를 사용했지만 항상 한 번 더 실행됩니다. 이 같은 코드 : 나는 SP를 실행 한 후MYSQL에서 CURSOR를 사용하여 한 번 더 실행하지 않으려면 어떻게해야합니까?

drop PROCEDURE if exists test_sp; 

DELIMITER // 

CREATE PROCEDURE test_sp() 
BEGIN 

DECLARE varid int; 
DECLARE varExit_loop BOOLEAN; 
DECLARE cursor_name CURSOR FOR 
SELECT id 
FROM test; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET varExit_loop = TRUE; 

drop table if exists test; 

create table test 
(id int); 
insert into test 
values 
(1), 
(2), 
(3); 

OPEN cursor_name; 
test_loop: LOOP 

    FETCH cursor_name INTO varid; 
select varid; 
    IF varExit_loop THEN 
     CLOSE cursor_name; 
     LEAVE test_loop; 
    END IF; 
END LOOP test_loop; 

END; // 

DELIMITER ; 

, 그것은 4 개 결과, 1,2,3 및 반환됩니다 더 한 3

3 일 더 많은 것을 피하기 위해 어떤 방법이 있나요?

고맙습니다.

+0

은 가져 오기 검사와 관련이없는 모든 코드를 가져 오기 확인 후에 이동해야합니다. (다시 말하면,'END IF;'다음에'select varid;'를 이동하십시오.) – Uueerdo

+0

결과 집합 (또는 여러 집합)이 다시 돌아올 때 무엇을 수행하려고합니까? – Drew

답변

1

은 내가 바로

FETCH cursor_name INTO varid; 

에서

IF varExit_loop THEN 
    CLOSE cursor_name; 
    LEAVE test_loop; 
END IF; 
END LOOP test_loop; 

를 이동하고 그것을 잘 작동했다.

+0

그게 맞는 곳이야. 나중에 모든 것이 곧 충분하지 않습니다. –

관련 문제