1

正常に動作する MySQL ストアド プロシージャ コードの次のスニペットを検討してください...

BEGIN
sponsor: loop
    -- DO STUFF

    select @sq := sq from a_nice_table where id = @a_nice_var;

    -- DO MORE STUFF
end loop sponsor;
END

変数「sq」を設定するコード行が私の質問のソースです。このストアド プロシージャ コードは "DO STUFF" に書き込まれており、結果を返すことはありません。変数を設定する必要がありますが、結果セットで @sq を返すことは望ましくありません。

コードに Navicat を使用していますが、ループの反復ごとに結果セットが返されます。

ストアド プロシージャの結果セットをオフにする方法はありますか? プロセスの途中でそれらを元に戻す方法もありますか? これは、デバッグ目的に役立ちます。ありがとうございました。

4

1 に答える 1

3

この入力方法は結果を出力しません。

select sq into @sq from a_nice_table where id = @a_nice_var limit 1;

複数の変数に対しても機能します

select sq, whatever, one_more into @sq, @v_whatever, @v_one_more from a_nice_table where id = @a_nice_var limit 1;

INTO 句では、1 つ以上の変数のリストを指定できます。変数は、ユーザー定義の変数、ストアド プロシージャまたは関数のパラメーター、またはストアド プログラムのローカル変数にすることができます。

詳しくはこちらをご覧ください。

LIMIT 1PS:クエリに追加したことに注意してください。そうしないと、クエリが複数の行を返すというエラーがスローされます。との違い

select @sq := sq from a_nice_table where id = @a_nice_var;

つまり、@sq := sqすべての行 (複数ある場合) に対して実行されますが、最終的に、変数はすべての行ではなく、最後の行の値を保持します。したがって、実際には結果セットに関して違いはありません...

于 2013-07-08T10:06:27.513 に答える