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); 

在触发代码中指定您想要的任何长度。