2011-03-07 40 views
1

嗨 在這個TRIGGER語句中是否有任何錯誤。當我嘗試在phpAdmin中運行它時,它給出的錯誤說「#1064 - 你的SQL語法有錯誤;檢查相應的手冊你的MySQL服務器版本正確的語法使用近「SELECT COUNT(*)到SIM_CCode_Count」。我不能讓什麼是錯在this..please幫我MySQL在phpAdmin中觸發錯誤

這是我的觸發聲明

CREATE TRIGGER Is_CountryCode_There After INSERT on mr_details FOR EACH ROW 

BEGIN 

DECLARE SIM_CCode_Count INTEGER; 
DECLARE NET_CCode_Count INTEGER; 


SELECT Count(*) into SIM_CCode_Count FROM Country_Main where CountryCode=NEW.SimCntISO; 

IF SIM_CCode_Count=0 THEN 
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.SIMCntISO,"Unknown"); 
END IF 

If NEW.SimCntISO<>NEW.NetCntISO then 

SELECT Count(*) into NET_CCode_Count FROM Country_Main 
where CountryCode=NEW.NetCntISO 

IF NET_CCode_Count=0 THEN 
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.NETCntISO,"Unknown"); 
END IF 


END IF 
END 

回答

3

如果沒有關於你的要求和表格的正確解釋以及你期望這個觸發器做什麼,那麼很難說有沒有問題在觸發ES有.. 但據我可以看到有一些小的修正需要做的.. 試試這個代碼,讓知道您詳細的要求..

CREATE TRIGGER Is_CountryCode_There After INSERT on mr_details FOR EACH ROW 
BEGIN 
DECLARE SIM_CCode_Count INTEGER; 
DECLARE NET_CCode_Count INTEGER; 

SELECT Count(*) into SIM_CCode_Count FROM Country_Main where CountryCode=NEW.SimCntISO; 

IF SIM_CCode_Count=0 THEN 
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.SIMCntISO,"Unknown"); 
END IF; 

If (NEW.SimCntISO<>NEW.NetCntISO) then 
SELECT Count(*) into NET_CCode_Count FROM Country_Main 
where CountryCode=NEW.NetCntISO; 

IF NET_CCode_Count=0 THEN 
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.NETCntISO,"Unknown"); 
END IF; 


End IF; 
END; 
+0

感謝您的快速reply..but仍然是其表現「#1064 - 你在你的SQL語法錯誤;檢查對應於您的MySQL服務器版本正確的語法手冊在第3行使用「 – 2011-03-07 14:30:55

+3

hmm ..嘗試在分隔符中給// //在phpadmin中的SQL選項卡的文本框以及上面的代碼 – Shijilal 2011-03-07 14:34:24

+0

感謝它的工作,像魅力..非常感謝你 – 2011-03-07 15:22:12

0

你必須申報觸發語句前MySQL的語句分隔符:

DELIMITER | 

CREATE TRIGGER ... 
    (your code) 
END| 

DELIMITER ; 

否則MySQL的解釋你;在此聲明的聲明和承諾執行immidiately代碼。將分隔符更改爲不同的字符時,可以安全地在觸發器聲明中使用分號。

在這裏看到:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html