MySQL:触发错误 1064 (42000)
MySQL: ERROR 1064 (42000) on trigger
谁能帮我解决这个触发器,看看我做错了什么。
顺便说一句,有时我没有遇到这个错误...
CREATE DEFINER = CURRENT_USER TRIGGER `domitik_db`.`disp_hdw_BEFORE_INSERT` BEFORE INSERT ON `disp_hdw` FOR EACH ROW
BEGIN
declare boxId int UNSIGNED;
declare unitId VARCHAR;
SET unitId=(SELECT homeunit FROM t_cpl WHERE t_cpl.id=NEW.idhardware);
SET boxId=(SELECT dispositifs.idbox FROM dispositifs WHERE dispositifs.id = NEW.iddispositif);
IF (SELECT COUNT(*) FROM disp_hdw, dispositifs, t_cpl as tp WHERE disp_hdw.iddispositif = dispositifs.id AND disp_hdw.idhardware=tp.id AND dispositifs.idbox = boxId AND tp.homeunit=unitId > 0)
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot add or update row: only one same homeunit id for a single box';
END IF;
END;
错误 1064 (42000),第 745 行:您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在 '; 附近使用的正确语法。
SET unitId=(SELECT homeunit FROM t_cpl WHERE t_cpl.id=NEW.idhardware);
您不能在没有长度的情况下声明 varchar
。
所以
declare unitId VARCHAR;
应该是
declare unitId VARCHAR(200);
在触发代码中指定您想要的任何长度。
谁能帮我解决这个触发器,看看我做错了什么。
顺便说一句,有时我没有遇到这个错误...
CREATE DEFINER = CURRENT_USER TRIGGER `domitik_db`.`disp_hdw_BEFORE_INSERT` BEFORE INSERT ON `disp_hdw` FOR EACH ROW
BEGIN
declare boxId int UNSIGNED;
declare unitId VARCHAR;
SET unitId=(SELECT homeunit FROM t_cpl WHERE t_cpl.id=NEW.idhardware);
SET boxId=(SELECT dispositifs.idbox FROM dispositifs WHERE dispositifs.id = NEW.iddispositif);
IF (SELECT COUNT(*) FROM disp_hdw, dispositifs, t_cpl as tp WHERE disp_hdw.iddispositif = dispositifs.id AND disp_hdw.idhardware=tp.id AND dispositifs.idbox = boxId AND tp.homeunit=unitId > 0)
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot add or update row: only one same homeunit id for a single box';
END IF;
END;
错误 1064 (42000),第 745 行:您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在 '; 附近使用的正确语法。
SET unitId=(SELECT homeunit FROM t_cpl WHERE t_cpl.id=NEW.idhardware);
您不能在没有长度的情况下声明 varchar
。
所以
declare unitId VARCHAR;
应该是
declare unitId VARCHAR(200);
在触发代码中指定您想要的任何长度。