mysql - creating a trigger - declare variable - Cant get my trigger to work -
this trigger designed update 'field_csvfilepath_value' match 'filepath' in files table (some table details below). cant work, please help.
delimiter $$ create trigger csv_filpath after insert on content_type_importcsv each row begin declare p varchar(80) set p := (select filepath content_type_importcsv join files new.content_type_importcsv.field_csv1_fid = files.fid) set new.field_csvfilepath_value = p end$$ delimiter ;
this trigger generating following error:
error code: 1064. have error in sql syntax; check manual corresponds mysql server version right syntax use near 'set p := (select filepath content_type_importcsv join files new.conte' @ line 5
i'm using mysql workbench 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$$
apart multiple syntax errors in code can't change column values of row being inserted in after
trigger. should use before
event instead.
that being said trigger can boiled down one-statement , therefore doesn't need begin ... end
block , change of delimiter.
create trigger csv_fillpath before insert on content_type_importcsv each row set new.field_csvfilepath_value = ( select filepath files fid = new.field_csv1_fid limit 1 );
here sqlfiddle demo
Comments
Post a Comment