MYSQLストアドプロシージャは、WHERE id IN句のすべてのIDを更新する必要がある場合に1レコードを更新します。ストアドプロシージャの外部でSELECTとUPDATEを実行すると正常に動作します。助言がありますか? 1行が影響:更新 レコードのMYSQLストアドプロシージャのみの更新
>
CALL update_generic_ids(63, 1258);
-
DELIMITER $$
CREATE PROCEDURE update_ids(IN source int(10),IN target int(10))
BEGIN
DECLARE idList varchar(5000) DEFAULT NULL;
SET idList = (SELECT GROUP_CONCAT(id SEPARATOR ', ') FROM myTable ii WHERE ii.generic_id = source);
UPDATE myTable i SET i.generic_id = target WHERE i.id IN (idList);
END$$
DELIMITER ;
その後、私はでそれを呼び出します。事前に
おかげで、
実際に影響を受けた行の数を確認しましたか?これはちょうどあなたのクエリツールの "1プロシージャを実行ok"と言うかもしれません –
'idList'の内容をチェックしましたか? 1つの結果しか得られないかもしれない、あるいはCaiusが言ったように、1つのプロシージャが実行された可能性があります。 – FMashiro
Ps、私はあなたが別々のテストを実行しているかどうかと同じではありません。カンマで区切られたIDの文字列を返すselectを実行し、それをコピーしてaに貼り付けます。クエリツールでクエリを更新して更新を実行しますが、IDに完全な文字列を変数に代入して単一の変数をリストに渡すことはできません.dbはID番号のリストとしてIDを調べません。それは数字とコンマでいっぱいの単一の文字列として見えます。文字通り '1,2,3,4'のIDを持つ行がない場合、クエリは機能しません! –