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

Popular posts from this blog

How to mention the localhost in android -

php - Calling a template part from a post -

c# - String.format() DateTime With Arabic culture -