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; 
# 

Я прохожу через ряд арифметических последовательностей. Этот код должен либо добавлять, либо вычитать, в зависимости от того, что из первых двух параметров. Затем мы проверяем, является ли значение шага положительным или отрицательным. Я получаю сообщение об ошибке, которое говорит, чтобы проверить синтаксис в: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

 Смежные вопросы

  • Нет связанных вопросов^_^