2010-12-28 3 views
0
CREATE DEFINER = `dba`@`xx.xx.xx.3` PROCEDURE `oninjadb`.`TESTLOOPER`() 
LANGUAGE SQL 
DETERMINISTIC 
NO SQL 
SQL SECURITY DEFINER 
COMMENT '' 
BEGIN 

DECLARE counter INT default 0; 


simple_loop: LOOP 
SET counter=counter+1; 
select counter; 
IF counter=100 THEN 
    leave simple_loop; 

END IF; 
end loop simple_loop; 
END 

좋아, 간단한 루프 문제, Google 검색에서 복사됩니다. 유일한 문제는 루프가 두 번 이상 통과하지 않으므로 출력이 1이며 그 것입니다. 나는 이것이 단순한 루프라는 것을 알고 있지만 더 복잡한 문제로 넘어갈 필요가있다. 미리 감사드립니다 ...간단한 루핑 질문

답변

1

프로 시저가 실제로 100 개의 쿼리를 실행하고 있습니다. 첫 번째 쿼리는 숫자가 1 인 결과를 반환합니다. 99 개의 다른 결과 집합이 올바른 숫자를 반환합니다.

프로 시저는 여러 쿼리에서 여러 결과 집합을 반환 할 수 있습니다. 다른 결과 세트를 다시 읽을 수있는 능력은 사용중인 API에 따라 다릅니다.

+0

. 행운을 빌어 99 개의 다른 쿼리를 테이블에 삽입/업데이트하려고했습니다. 99 개의 다른 쿼리를 어떻게 캡처합니까? – Chad

+0

Navicat에 익숙하지 않아 프로 시저에서 생성 한 모든 결과 세트를 볼 수있는 방법을 모르겠습니다. 그러나 프로 시저 내에서 여러 INSERT 쿼리를 실행하면 모든 INSERT 쿼리가 성공적으로 실행됩니다. – TehShrike

+0

도움이되었습니다 덕분에 – Chad

1

이 다시 궤도에 당신을 얻을 수 있습니다 :) 내가 Navicat는 프리미엄와 MySQL 5.1.39 로그를 사용하고

drop procedure if exists test_looper; 

delimiter # 

create procedure test_looper 
(
in p_max int unsigned 
) 
proc_main:begin 

declare v_counter int unsigned default 0; 

if p_max is null or p_max <= 0 then 
    leave proc_main; 
end if; 

while v_counter < p_max do 
    select v_counter; 
    set v_counter=v_counter+1; 
end while; 

end proc_main# 

delimiter ; 


call test_looper(10); 
+0

약간 수정했습니다 (표에 삽입). 도와 주셔서 감사합니다. – Chad