2014-07-16 3 views
0

이 트리거가 작동하지 않는 것 같습니다.if 문을 사용하는 MYSQL 트리거

CREATE TRIGGER class_check BEFORE INSERT ON Category 
DECLARE x VARCHAR(1); 
SET x = (SELECT Type1 FROM Category); 
IF (x<>'A') THEN 
CALL `'ERROR'`; 
END IF; 
IF (NEW.MxLen > 3 AND x ='M') THEN 
CALL `'ERROR LENGTH MUST BE LESS THAN 3 FOR M CLASS LICENSE'`; 
ELSEIF (NEW.MxLen > 5 AND x ='G') THEN 
CALL `'ERROR LENGTH MUST BE LESS THAN 5 FOR G CLASS LICENSE'`; 
ELSEIF (NEW.MxLen > 30) THEN 
CALL `'ERROR LENGTH MUST BE LESS THAN 30 FOR A,B,C,D,E CLASS LICENSE'`; 
END IF; 

위의 트리거는 내가 원하는 방식으로 작동하지 않으며 문제를 찾을 수없는 것 같습니다. 기본적으로 Category 테이블의 type1이 Not A인지 확인한 다음 오류가 발생하는지 확인하고 싶습니다. A를 추가 할 때마다 오류가 계속 발생합니다. 도움이 될 것입니다. 나는 BEFORE UPDATE에도 똑같은 것을 가지고있다.

+0

어떤 오류 메시지가 나타 납니까? 아마도 'ERROR LENGTH는 A, B, C, D, E CLASS 라이센스'에 대해 30 이하 여야 만합니까? –

+0

첫 번째 오류 'ERROR'가 표시됩니다. – user3221162

답변

0

backticks는 그 사이에있는 식별자의 이름을 이스케이프 처리합니다. 나는 당신이 실제로이 이름들을 가진 어떤 식별자를 가지고 있는지 의심 스럽다. 문자열에 작은 따옴표를 사용하십시오.

일반적으로 call에는 그 뒤에 프로 시저 이름이 저장됩니다. 이 라인은 무엇 명확하지 않다 또한

CREATE TRIGGER class_check BEFORE INSERT ON Category 
DECLARE x VARCHAR(1); 
SET x = (SELECT Type1 FROM Category); 
IF (x <> 'A') THEN 
    SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR'; 
END IF; 
IF (NEW.MxLen > 3 AND x ='M') THEN 
    SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR LENGTH MUST BE LESS THAN 3 FOR M CLASS LICENSE'; 
ELSEIF (NEW.MxLen > 5 AND x ='G') THEN 
    SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR LENGTH MUST BE LESS THAN 5 FOR G CLASS LICENSE'; 
ELSEIF (NEW.MxLen > 30) THEN 
    SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR LENGTH MUST BE LESS THAN 30 FOR A,B,C,D,E CLASS LICENSE'; 
END IF; 

: 나는 오류가 발생하는 당신이 정말로 원하는 것을 signal을 추측하고

SET x = (SELECT Type1 FROM Category); 

이 둘 이상의 행 경우 오류를 반환 할 가능성이 Category에 있습니다.

관련 문제