2012-09-23 4 views
0
Create procedure count_loop(p_start int, 
           p_stop int, 
           p_step int unsigned, 
           p_delim varchar(5)) 
begin 
declare v_start int ; 
declare v_stop int ; 
declare v_step int ; 
declare v_sign int; 
declare v_sum int; 

-- check p_start 
case p_start 
when null then 
    set v_start := 1; 
else 
    set v_start := p_start; 
end case; 

-- check p_stop 
case p_stop 
when null then 
    set v_stop := 10; 
else 
    set v_stop := p_stop; 
end case; 

-- check p_stop 
case p_step 
when null then 
    set v_step := 1; 
when 0 then 
    set v_step := 1; 
else 
    set v_step := p_step; 
end case; 

-- set v_sign as v_stop - v_start 
set v_sign := (v_stop - v_start) ; 


case 
-- if v_sign and v_step are negative, 
-- then run while loop 
when v_sign < 0 and v_step < 0 then 
    while v_start > v_stop then 
     set v_start = v_start + v_step ; 
     select v_start as 'The Loop Output'; 
     set v_step = v_step - 1; 
    end while; 
-- if both v_sign and v_step are positive 
-- then run loop 
when v_sign > 0 and v_step > 0 then 
    while v_start > v_stop then 
     set v_start := v_start + v_step ; 
     select v_start as 'The Loop Output'; 
     set v_step := v_step + 1; 
    end while; 
-- if v_sign and v_step are different signs 
-- terminate loop 
when v_sign > 0 and v_step < 0 then 
    select 'Loop collapsed' as 'The Loop Output' ; 
when v_sign < 0 and v_step > 0 then 
    select 'Loop collapsed' as 'The Loop Output' ; 
end case ; 

end; 
# 

일련의 산술 시퀀스를 반복합니다. 이 코드는 처음 두 매개 변수가 무엇인지에 따라 더하거나 빼야합니다. 그런 다음 단계 값이 양수인지 음수인지 확인합니다. I라는 오류가있는 구문을 확인 받고 있어요 :케이스가있는 경우의 mysql 프로 시저

set v_start = v_start + v_step ; 
     select v_start as 'The Loop Output'; 
     set v_step = v_step - 1; 

그럼 내가 통해 내 코드를 실행하는을 포함하여 두 문장을 삭제. 오류가 없습니다. 하지만 지금 나는 무엇을 해야할지 잘 모릅니다. 무엇을 수정해야하는지 모르겠습니다. 어떤 제안? 고맙습니다.

+0

오류가 당신이 얻고있는 것이 무엇인지에 대한 정보가없는 무의미 "나는 오류가 받고 있어요"를 참조하십시오. ** 정확한 ** 오류 메시지를 포함하여 해당 정보를 제공하도록 질문을 편집하십시오. 우리는 당신의 마음을 읽거나 여기에서 당신의 스크린을 볼 수 없습니다. –

+0

내가 발췌 문장을 잘못 읽는 것을 보았으므로 주석의 해당 부분을 편집했습니다. :-) 오류 정보는 여전히 필요합니다. 이상하게도 내 의견의 일부를 놓치 셨습니다. ;-) –

+0

게시물 자체에서 편집 ... 그 snip-it 근처에 올바른 구문을 확인하는 오류가 발생했습니다. – user1682055

답변

0

귀하의 오류는 게시 한 스 니펫 위의 while v_start > v_stop then에 있습니다. 대신 while v_start > v_stop do으로 읽어야합니다. (사실, 당신은 장소의 몇을 가지고, 모든 while 문을 확인합니다.)

the MySQL documentation here

+0

예. 방금 고쳤어. 감사! – user1682055