1

case ステートメントを使用して、別の列の値に基づいて列を更新しようとしています。MySQL で「rma」と呼ばれる私のテーブルは次のとおりです。

ID    |    rma_number    |     serial_number     |    ref_status_id
1     |       9898       |         123456        |          19
2     |       7869       |         098768        |           3

これが私のストアドプロシージャです:

CREATE DEFINER=`admin`@`localhost` PROCEDURE `delete_update_rma`(in selectedID int, in selectedRMAID int)
begin

declare rmaStatus int(5);

select ref_status_id into rmaStatus
from rma
where id = selectedRMAID;

case rmaStatus
when 19 then
set ref_status_id = 0;

end case;

delete from dropbox where id = selectedID;

end

プロシージャを作成するために保存しようとすると、エラー #1193 - 不明なシステム変数 'ref_status_id' が表示されます。

ストアド プロシージャの何が問題なのかを特定するのを手伝ってくれる人はいますか?

4

3 に答える 3

0

case 構文は正しいですが、case ステートメント内のデータベース フィールドを変更することはできません。そのためには update ステートメントを使用する必要があります。

UPDATE rma 
SET    ref_status_id = 0 
WHERE  ref_status_id = 19 
       AND id = selectedrmaid; 

この種の case ステートメント内のローカル変数のみを変更できます。

あなたのケースは、ストアド プロシージャを実行する際の一般的なエラーである、プロシージャ ロジックとクエリ ロジックを混在させる典型的なケースです。

于 2014-01-08T03:16:35.167 に答える