programing

MySQL: 트리거 시 오류 1064(42000)

sourcejob 2023. 9. 1. 20:49
반응형

MySQL: 트리거 시 오류 1064(42000)

제가 뭘 잘못하고 있는지 누가 이 방아쇠를 좀 도와주시겠어요?

BTW 가끔은 이런 오류가 없었어요...


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;

745행의 오류 1064(42000): SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 ';' 근처에서 사용할 올바른 구문을 확인하십시오.

SET unitId=(t_cpl WHERE t_cpl.id=NEW.id 하드웨어에서 홈 유닛 선택);

선언할 수 없습니다.varchar길이 없이. 그래서.

declare unitId    VARCHAR; 

그래야 한다

declare unitId    VARCHAR(200); 

트리거 코드에서 원하는 길이를 지정합니다.

언급URL : https://stackoverflow.com/questions/30167484/mysql-error-1064-42000-on-trigger

반응형