いくつかのカーソルを持つMySQLストアドプロシージャがあります。値を出力してクライアントに出力を送りたいのですが。 SQLyog Enterprise 。
変数をTEXTとして宣言し、ループ内で連結しようとしましたが、少なくとも、私がやろうとしていた方法では機能しません。
DECLARE _output TEXT;
DECLARE _ID INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO _ID;
IF NOT done THEN
SET _output = _ID; /*SEE ALT BELOW*/
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
SELECT _output;
私はもう試した:
SET _output = _output + _ID
そして
SET _output = CONCAT(_output,_ID)
しかし、どちらもNULLを返すだけです
SET _output = _ID;
は最後にフェッチされた行を表示します。これは役に立ちましたが、私が欲しかったものではありません。
MySQLストアドプロシージャでMySQL印刷を再現するために、フェッチされた各行を画面に出力する最良の方法は何ですか?
SELECT _outputで正しく実行しています。 INTO句なしで選択されたものはすべてクライアントに返されます。
それらをすべて取得するには、SELECTをループに移動して(それぞれを個別に出力する)、またはそれらを連結します。 concatがNULLを返す問題は、_outputを何にも初期化しなかったためNULLでした。 NULLと連結するとNULLが返されます。
以下を試してください:
DECLARE _output TEXT DEFAULT ''; DECLARE _ID INT DEFAULT 0; DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur1; REPEAT FETCH cur1 INTO _ID; IF NOT NOT THEN SET _output = CONCAT ( "、"、_ID);/*以下を参照してください*/ END IF; UNTIL done END REPEAT; CLOSE cur1; SELECT _output ;