我的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说:文档> #1064 - 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获得正确的语法 靠近''第5行
那条线是 我尝试删除空格,组合了撇号('和`),删除并重新编写了一些行,但无法使其工作,这段代码出了什么问题?
答案 0 :(得分:1)
您需要在delimiter
命令之前和之后使用create trigger
命令,否则终止触发器主体内的命令的分号将使mysql混淆。请参阅defining stored programs上的mysql文档,其中还提供了如何使用delimiter
命令的示例。