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

一連の等差数列をループしています。このコードは、最初の2つのパラメーターが何であるかに応じて、加算または減算する必要があります。次に、ステップ値が正か負かを確認します。次の場所で構文を確認するように指示するエラーが発生します。

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

そこで、それを含む2つのwhenステートメントを削除し、コードを実行しました。エラーはありませんでした。しかし、今は次に何をすべきかわかりません。何を修正する必要があるのか​​わかりません。助言がありますか?ありがとうございました。

4

1 に答える 1

0

エラーは、while v_start > v_stop then投稿したスニペットのすぐ上にあります。while v_start > v_stop do代わりに読む必要があります。(実際には、いくつかの場所にあります。すべてのwhileステートメントを確認してください。)

こちらのMySQLドキュメントを参照してください

于 2012-09-23T05:27:16.850 に答える