我正在尝试使用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'。
有人可以帮我识别我的存储过程可能出错吗?
答案 0 :(得分:1)
试试这个:
CREATE DEFINER=`admin`@`localhost` PROCEDURE `delete_update_rma`(IN selectedID INT, IN selectedRMAID INT)
BEGIN
UPDATE rma
SET ref_status_id =
CASE ref_status_id
WHEN 19 THEN 0
WHEN 3 THEN 2
ELSE ref_status_id
END
WHERE id = selectedRMAID;
DELETE FROM dropbox WHERE id = selectedID;
END
<强>输出强>
| ID | RMA_NUMBER | SERIAL_NUMBER | REF_STATUS_ID |
|----|------------|---------------|---------------|
| 1 | 12345 | 67898 | 0 |
| 2 | 45645 | 89056 | 2 |
答案 1 :(得分:0)
案例语法是正确的,但是您无法更改案例语句中的数据库字段,您需要使用更新语句。
UPDATE rma
SET ref_status_id = 0
WHERE ref_status_id = 19
AND id = selectedrmaid;
您只能在此类案例陈述中更改本地变量。
你的是混合过程和查询逻辑的典型案例,这是执行存储过程时的常见错误。
答案 2 :(得分:-1)
行==&gt;
set ref_status_id = 0;
导致错误。您将集合ref_status_id
视为变量,当它是rma表中的一列时。
你在那个案例陈述中想做什么?由于检查硬编码值为19似乎与您要执行的操作不一致。