我对这段 SQL 代码有疑问。我想创建一个触发器,就在这里。
CREATE TRIGGER `blog_after_insert` AFTER UPDATE ON `agent`
FOR EACH ROW
BEGIN
DECLARE costvalue INTEGER default 0;
IF (OLD.PacketStatusType_Id!=NEW.PacketStatusType_Id) THEN
IF (OLD.Packet_Cost IS NULL) THEN
SET costvalue = OLD.Packet_Cost;
ELSE
SET costvalue = OLD.Packet_SMSCount;
END IF;
IF (costvalue IS NOT NULL) THEN
CALL tcksms_packet_update_proc(OLD.Transaction_Id,OLD.PacketStatusType_Id,costvalue,-1);
ELSE
CALL tcksms_packet_update_proc(OLD.Transaction_Id,OLD.PacketStatusType_Id,0,-1);
END IF;
DECLARE COST_VALUE_NEW INT DEFAULT 0;
IF (NEW.Packet_Cost IS NULL) THEN
SET COST_VALUE_NEW = NEW.Packet_Cost;
ELSE
SET COST_VALUE_NEW = NEW.Packet_SMSCount;
END IF;
IF (COST_VALUE_NEW IS NOT NULL) THEN
CALL tcksms_packet_update_proc(NEW.Transaction_Id,NEW.PacketStatusType_Id,COST_VALUE_NEW,1);
ELSE
CALL tcksms_packet_update_proc(NEW.Transaction_Id,NEW.PacketStatusType_Id,0,1);
END IF;
ELSE
END IF;
END IF;
END
但是我明白了;
错误
SQL查询:
CREATE TRIGGER `blog_after_insert` AFTER UPDATE ON `agent` FOR EACH ROW BEGIN DECLARE costvalue INTEGER default 0;
MySQL said: Documentation > #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
那一行是 我尝试删除空格,组合撇号(' 和 `),手动删除和重写一些行,但无法正常工作,这段代码有什么问题?
最佳答案
在create trigger
命令前后需要使用delimiter
命令,否则触发器体内以分号结束命令会混淆mysql。查看 mysql 的文档 defining stored programs ,其中还有如何使用 delimiter
命令的示例。
关于mysql错误,在 ''附近使用正确的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35360161/