2015-09-04 107 views
0

我想在插入表後運行的mysql中編寫觸發器。插入後,它從attrValue列中取值,其中attrType等於'datetime',並更新另一列名爲attrMd的列。在mysql中插入觸發器後

這是我嘗試了,但現在它口口聲聲說我有4行語法值:

1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在第4行使用正確的語法'''

我找不出來。任何幫助深表感謝。謝謝...

CREATE TRIGGER upd_check BEFORE INSERT ON def_servpath_0001_weatherstation 
FOR EACH ROW 
BEGIN 
DECLARE someString text; 
FOR EACH ROW 
BEGIN 
    IF NEW.atrType = 'datetime' THEN 
     SET @someString := NEW.atrValue; 
    END IF; 
END; 

FOR EACH ROW 
BEGIN 
    IF NEW.atrType <> 'datetime' THEN 
     SET NEW.atrMD = someString; 
    END IF; 
END; 
END;// 

編輯 Image

+0

我在插入後寫入,但是在插入之前寫入。對不起...... –

+0

你在哪裏運行觸發器? mysql cli/phpmyadmin?以及觸發器應該做什麼,它給出的代碼非常混亂。請在其中添加更多信息。 –

+0

我在phpmyadmin上運行它。觸發器應該用聲明的變量some​​String更新列attrMd。如果滿足給定條件,someString會從列attrValue中取值... –

回答

0

幾點考慮:

CREATE TRIGGER upd_check BEFORE INSERT ON def_servpath_0001_weatherstation 
FOR EACH ROW 
BEGIN 
DECLARE someString text; 
-- FOR EACH ROW 
BEGIN 
    IF NEW.atrType = 'datetime' THEN 
     SET @someString := NEW.atrValue; 
    END IF; 
END; 

-- FOR EACH ROW 
BEGIN 
    IF NEW.atrType <> 'datetime' THEN 
     SET NEW.atrMD = someString; 
    END IF; 
END; 
END;// 
+0

謝謝你的擡頭,它通過了,但它不能正常工作,我會發布圖像它應該做什麼... –

+0

我張貼圖像以更好看... –

+0

我使用兩個'對於每一行,因爲不知道'atrType ='datetime'是否始終是第一個。 –