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;
#
一連の等差数列をループしています。このコードは、最初の2つのパラメーターが何であるかに応じて、加算または減算する必要があります。次に、ステップ値が正か負かを確認します。次の場所で構文を確認するように指示するエラーが発生します。
set v_start = v_start + v_step ;
select v_start as 'The Loop Output';
set v_step = v_step - 1;
そこで、それを含む2つのwhenステートメントを削除し、コードを実行しました。エラーはありませんでした。しかし、今は次に何をすべきかわかりません。何を修正する必要があるのかわかりません。助言がありますか?ありがとうございました。