语法错误更新案例mysql
Syntax error update case mysql
我正在尝试更新我的数据库中的 table,我环顾四周,但似乎无法正常工作。
我想要实现的是更新 table 中的 "quantity" 列。
如果数量 > 0 则数量 - xxx 值
如果数量 < 0,则将状态列设置为 0
这是我的代码:
CREATE DEFINER=`root`@`localhost` PROCEDURE `update_quantity`(IN iarticleid varchar(45), IN iquantity int(11))
BEGIN
UPDATE product_varities set product_varities.quantity = CASE
WHEN product_varities.quantity > 0 Then product_varities.quantity = product_varities.quantity - iquantity
WHEN product_varities.quantity < 0 THEN product_varities.`status` = 0
WHERE product_varities.article_id = iarticleid;
END CASE;
END
MySQL Workbench 中显示的当前错误消息:
第 5 行 - 缺少语法错误 'end'
第 7 行 - 缺少语法错误 'end'
如您所见,我已经放置了 "end",我不确定我做错了什么。有人能指出我正确的方向吗?谢谢
我认为您正试图在表达式内部进行流控制,但这不是实现它的方法。
我认为这样做会更好:
CREATE PROCEDURE `update_quantity`(IN iarticleid varchar(45), IN iquantity int(11))
BEGIN
update product_varities
set quantity = quantity - iquantity
where article_id = iarticleid and quantity > 0;
update product_varities
set status = 0
where article_id = iarticleid and quantity < 0;
END
如果您愿意,您可以将其写成一个 update
:
UPDATE product_varities pv
SET pv.quantity = (CASE WHEN pv.quantity > 0 THEN pv.quantity - iquantity
ELSE pv.quantity END),
pv.status = (CASE WHEN pv.quantity < 0 THEN 0 ELSE pv.status)
WHERE pv.article_id = iarticleid;
我正在尝试更新我的数据库中的 table,我环顾四周,但似乎无法正常工作。
我想要实现的是更新 table 中的 "quantity" 列。
如果数量 > 0 则数量 - xxx 值 如果数量 < 0,则将状态列设置为 0
这是我的代码:
CREATE DEFINER=`root`@`localhost` PROCEDURE `update_quantity`(IN iarticleid varchar(45), IN iquantity int(11))
BEGIN
UPDATE product_varities set product_varities.quantity = CASE
WHEN product_varities.quantity > 0 Then product_varities.quantity = product_varities.quantity - iquantity
WHEN product_varities.quantity < 0 THEN product_varities.`status` = 0
WHERE product_varities.article_id = iarticleid;
END CASE;
END
MySQL Workbench 中显示的当前错误消息: 第 5 行 - 缺少语法错误 'end' 第 7 行 - 缺少语法错误 'end'
如您所见,我已经放置了 "end",我不确定我做错了什么。有人能指出我正确的方向吗?谢谢
我认为您正试图在表达式内部进行流控制,但这不是实现它的方法。
我认为这样做会更好:
CREATE PROCEDURE `update_quantity`(IN iarticleid varchar(45), IN iquantity int(11))
BEGIN
update product_varities
set quantity = quantity - iquantity
where article_id = iarticleid and quantity > 0;
update product_varities
set status = 0
where article_id = iarticleid and quantity < 0;
END
如果您愿意,您可以将其写成一个 update
:
UPDATE product_varities pv
SET pv.quantity = (CASE WHEN pv.quantity > 0 THEN pv.quantity - iquantity
ELSE pv.quantity END),
pv.status = (CASE WHEN pv.quantity < 0 THEN 0 ELSE pv.status)
WHERE pv.article_id = iarticleid;