0

以下に、パラメーターを使用してループするプロシージャーのセットアップを示します。ただし、その一部をテストしていましたが、不要な出力が得られました。

p_start を null にすることを選択した場合、select v_start の出力には v_start is NULL と表示されます。しかし、case ステートメントを使用すると、代わりに v_start が 1 として再定義されると思いました...

助言がありますか?ありがとう。

Create procedure counter_loop( p_start int, 
                               p_end int,
                               p_step int, 
                               p_delim varchar(5))
begin
declare v_start int ;
declare v_end int ;
declare v_step int ;
declare v_sign int;


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

 select v_start;
4

2 に答える 2

0

構文が間違っていました...p_startでnullの場合をチェックするとき...ISNULLでチェックしてください。

 case 
 when **p_start is** null then
    set v_start := 1;
 else
    set v_start := p_start;
 end case;
于 2012-09-27T02:41:30.717 に答える
0

ストアド プロシージャを呼び出すときに、p_start パラメータを null として宣言していると言っていますか? または空の文字列を渡しますか?

exec counter_loop(null,10,2,'abc') の場合、 null ケースでキャッチされると思います。

null の代わりに p_start で整数チェックを使用することをお勧めします。

何かのようなもの:

CASE p_start when (len(p_start) > 0 and p_start > 0)  then ...
于 2012-09-27T02:18:15.800 に答える