2012-12-13 3 views
0

루프 내부에 프로 시저를 만들려고합니다.하지만이 코드를 호출하면 첫 번째 레코드가 표시되고 interate되지 않습니다.MYSQL 루프는 첫 번째 레코드 만 표시합니다.

delimiter // 
create procedure load_foo_test_data() 
begin 

declare v_max int unsigned default 10; 
declare v_counter int unsigned default 1; 

select COUNT(*) into v_max FROM emp; 

start transaction; 
while v_counter < v_max do 
    select * from emp where emp_id = v_counter; 
    set v_counter=v_counter+1; 
end while; 
commit; 
end 
// 
delimiter ; 

내가 프로 시저를 호출하면 첫 번째 레코드 (ID가 1 인 경우) 만 표시됩니다.

"select v_counter"로 시도했지만 1도 표시합니다.

대신 루프를 사용해 보았습니다.

나는 mysql에서 속편과 함께 일하고있다. 5.5

고마워!

+0

? 귀하의 오류와 관련이 없지만 아마도 이상하게 보입니다. – ethrbunny

+0

사실, 나는 while 루프 (트랜잭션이 아니고 커밋되지 않음) 만 가지고 노력했지만 동일한 문제가있었습니다. 해결책을 찾고 나는이 예제를 발견했다. (원래는 "insert"가 아니고 "select"가 아니다.) 그러나 첫 번째 레코드의 문제 만 수정하면 안된다. – Vertig0

+0

수동으로 여러 항목을 선택하는 경우 모든 결과 집합을 처리 할 수 ​​있습니까? 왜 단 하나가 아닌 여러 개의 선택을하고 싶습니까? –

답변

-1

은 당신이 사용하는

while () { 

    // do this 

} 
+0

"{}"?을 의미하지만 SQL에서는 작동하지 않습니다. – Vertig0

-1

시도를 사용한다고 생각

SET v_counter = 0;  
REPEAT 
IF v_counter < v_max do THEN 
    select * from emp where emp_id = v_counter; 
    set v_counter=v_counter+1; 
END IF; 
UNTIL v_counter END REPEAT; 
루프는 '시작의 트랜잭션/커밋'에 둘러싸여 왜
관련 문제