2013-02-04 2 views
3

좋아, 그래서 내가 일하고있어, 그리고 그것은 (MySQL의 워크 벤치 5.2)이 변수를 인식하지 못한다고 말해.
* 오류 코드 : 1193. 알 수없는 시스템 변수 error_msg_3 * 나는 그것이 트리거를 사용하여 올바른있을 거라고 생각MySQL의 오류 코드 : 1193. 알 수없는 시스템 변수

, 나에게

CREATE TRIGGER controlla_MaxCARDINALITA_INSERT 
BEFORE INSERT ON SENTIERO__HA__TAPPA 
FOR EACH ROW 
BEGIN 

DECLARE max_cardinalita INTEGER; 
DECLARE error_msg_3 CONDITION FOR SQLSTATE '99003'; 

SELECT COUNT(*) into max_cardinalita 
FROM SENTIERO__HA__TAPPA 
WHERE IDsentiero=NEW.IDsentiero; 

IF max_cardinalita>=10 THEN 
     SIGNAL error_msg_3; 
     SET error_msg_3='INSERT: Il sentiero ha già il massimo numero di tappe consentito'; 

END IF; 

END$$ 

편집 :

도와주세요 나는 이것을 시도하고 작동하는 것 같다.

DECLARE msg VARCHAR(255); 
set msg = concat('MyTriggerError: Trying to insert a negative value in trigger_test: '); 
signal sqlstate '45000' set message_text = msg; 

답변

3

MySQL docs에 따르면 SQLSTATE에 잘못된 코드를 사용하면 #1193 오류가 발생합니다.

메시지 : 알 수없는 시스템 변수 %의 같은 page에 볼 수

그리고이는 SQLSTATE 99003가 정의되어 있지 않습니다.

+0

내 편집을 참조하십시오. 왜 코드가 작동합니까? 테이블에 45000이 없다고 생각합니다. – FrancescoN

+0

@ Jimmy5nomana 다시 한 번 ['SIGNAL'] (http://dev.mysql.com/doc/refman/5.5/en/signal. html) 절. 명확하게 언급 : ** 신호는 오류를 "반환"하는 방법입니다. SIGNAL은 핸들러, 응용 프로그램의 외부 부분 또는 클라이언트에 오류 정보를 제공합니다. 일반적인 SQLSTATE 값을 표시하려면 '45000'을 사용하십시오. 즉, 처리되지 않은 사용자 정의 예외 _를 나타냅니다. ** – hjpotter92

+0

마지막 질문입니다. mysql을 사용하면 동일한 이벤트와 작업 시간에 여러 테이블을 사용할 수 없습니다. .. 그래서 나는 기능과 절차에 대해 들었다. 그들에게 해결책이 있습니까? 나는 그것을 가장 쉬운 방법으로 해결하고 싶습니다. 나는 서둘러 있습니다. 감사합니다 – FrancescoN