我收到错误" MySQL说:#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在#DEC; DECLARE @itm_qty decimal(10,2)附近使用正确的语法; DECLARE @insert_qty十进制(10,2); SELECT @ ins'在第1行"。请帮助我
CREATE TRIGGER `updatestockqty` AFTER INSERT ON `billingitemtb`
FOR EACH ROW
AS
DECLARE @itm_qty as decimal(10,2);
DECLARE @insert_qty as decimal(10,2);
SELECT @insert_id=i.bt_itmid from INSERTED i;
select @itm_qty=itemtb.itm_qtyinstock
from itemtb
where itemtb.itm_id=@insert_id;
BEGIN
IF(i.bt_itmqty<@itm_qty)THEN
UPDATE [db].itemtb
SET itemtb.itm_qtyinstock = itemtb.itm_qtyinstock - NEW.bt_itmqty
WHERE itemtb.itm_id = NEW.bt_itmid;
end IF;
END
答案 0 :(得分:0)
至于Starter,DECALRE应该在BEGIN和END
CREATE TRIGGER `updatestockqty` AFTER INSERT ON `billingitemtb`
FOR EACH ROW
AS
BEGIN
DECLARE @itm_qty decimal(10,2);
DECLARE @insert_qty decimal(10,2);
SET @itm_qty = select itemtb.itm_qtyinstock
from itemtb
where itemtb.itm_id=NEW.bt_itmid -- Change this itemID column to corresponding column in billingitem;
IF(i.bt_itmqty<@itm_qty)THEN
UPDATE itemtb
SET itemtb.itm_qtyinstock = itemtb.itm_qtyinstock - NEW.bt_itmqty
WHERE itemtb.itm_id = NEW.bt_itmid;
end IF;
END
来自文档https://dev.mysql.com/doc/refman/5.7/en/declare.html
仅允许在BEGIN ... END复合语句中使用DECLARE 并且必须在任何其他陈述之前开始。
答案 1 :(得分:0)
我得到了答案
BEGIN
DECLARE itm_qty decimal;
DECLARE insert_qty decimal;
declare msg varchar(128);
select itemtb.itm_qtyinstock INTO itm_qty
from itemtb
where itemtb.itm_id=NEW.bt_itmid;
if new.bt_itmqty < itm_qty THEN
UPDATE itemtb
SET itemtb.itm_qtyinstock = itemtb.itm_qtyinstock - NEW.bt_itmqty
WHERE itemtb.itm_id = NEW.bt_itmid;
ELSE
set msg = concat('MyTriggerError: Trying to insert a greater qty value in
updatestockqty: ');
signal sqlstate '45000' set message_text = msg;
end IF;
END