2013-02-04 75 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

消息:未知系統變量%S

而且,正如你可以在同一page看到,SQLSTATE 99003沒有定義。

+0

請參閱我的編輯,爲什麼該代碼有效?表中沒有45000,我認爲 – FrancescoN

+0

@ Jimmy5nomana請再次參考關於['SIGNAL'](http://dev.mysql.com/doc/refman/5.5/en/signal。 html)條款。它清楚地提到:** SIGNAL是「返回」錯誤的方式。 SIGNAL向處理程序,應用程序的外部或客戶端提供錯誤信息。要表示一個通用的SQLSTATE值,請使用'45000',這意味着_unhandled用戶定義的異常_。** – hjpotter92

+0

謝謝,最後一個問題:mysql不允許我爲同一個表使用多個觸發器來執行相同的事件和操作。 ..所以我聽說了功能和程序;他們是解決方案嗎?我想以最簡單的方式解決它,我很着急。謝謝 – FrancescoN

相關問題