2013-07-18 58 views
-1

此觸發器旨在更新'field_csvfilepath_value'以匹配文件表(下面的一些表格詳細信息)中的'文件路徑'。但我無法讓它工作,請幫助。創建觸發器 - 聲明變量 - 無法讓我的觸發器工作

delimiter $$ 
CREATE TRIGGER csv_filpath 
AFTER INSERT ON content_type_importcsv for each row 
begin 
    declare p varchar(80) 
    set p := (SELECT filepath FROM content_type_importcsv join files where NEW.content_type_importcsv.field_csv1_fid = files.fid) 

    set NEW.field_csvfilepath_value = p 

    end$$ 
    delimiter ; 

這觸發產生以下錯誤:

錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用附近的手冊「集P:=(選擇文件路徑FROM content_type_importcsv加入其中NEW.conte文件的第5行

我使用MySQL工作臺5.2

delimiter $$ 
delimiter $$ 

CREATE TABLE `content_type_importcsv` (
    `vid` int(10) unsigned NOT NULL DEFAULT '0', 
    `nid` int(10) unsigned NOT NULL DEFAULT '0', 
    `field_csv1_fid` int(11) DEFAULT NULL, 
    `field_csv1_list` tinyint(4) DEFAULT NULL, 
    `field_csv1_data` text, 
    `field_csvfilepath_value` longtext, 
    PRIMARY KEY (`vid`), 
    KEY `nid` (`nid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$ 


CREATE TABLE `files` (
    `fid` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `uid` int(10) unsigned NOT NULL DEFAULT '0', 
    `filename` varchar(255) NOT NULL DEFAULT '', 
    `filepath` varchar(255) NOT NULL DEFAULT '', 
    `filemime` varchar(255) NOT NULL DEFAULT '', 
    `filesize` int(10) unsigned NOT NULL DEFAULT '0', 
    `status` int(11) NOT NULL DEFAULT '0', 
    `timestamp` int(10) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (`fid`), 
    KEY `uid` (`uid`), 
    KEY `status` (`status`), 
    KEY `timestamp` (`timestamp`) 
) ENGINE=MyISAM AUTO_INCREMENT=55 DEFAULT CHARSET=utf8$$ 

回答

0

除了在你的代碼你不能改變列多個語法錯誤在AFTER觸發器中插入一行的值。您應該使用BEFORE事件。

這就是說你的觸發器可以歸結爲一個語句,因此不需要BEGIN ... END塊和更改分隔符。

CREATE TRIGGER csv_fillpath 
BEFORE INSERT ON content_type_importcsv 
FOR EACH ROW 
    SET NEW.field_csvfilepath_value = 
    (
    SELECT filepath 
     FROM files 
    WHERE fid = NEW.field_csv1_fid 
    LIMIT 1 
); 

這裏是SQLFiddle演示

+0

哇!那好美麗。謝謝 –

+0

不客氣。我很高興我可以幫助:) – peterm

0

有一些語法錯誤:

  1. 你列出由set p :=:造成的,你應該將其刪除
  2. 0123之間每行和end$$;
  3. end你不能在觸發後更新新行,所以它觸發之前應該是