2012-08-02 64 views
3

这里是我试图用它来创建触发器代码:如果里面CONCAT

-- Dumping structure for trigger kavanga_lead.click_links_insert 
DROP TRIGGER IF EXISTS `click_links_insert`; 
SET @[email protected]@SQL_MODE, SQL_MODE=''; 
DELIMITER // 
CREATE TRIGGER `click_links_insert` AFTER INSERT ON `click_links` FOR EACH ROW BEGIN 
    INSERT INTO actions_log 
     (
      `uid`, 
      `table`, 
      `action`, 
      `new` 
     ) 
     VALUES 
     ( 
      @user_id, 
      'click_links', 
      'insert', 
      concat(NEW.id ,'|', NEW.`contents`, '|', NEW.channel_id, '|', NEW.name, '|', NEW.hidden, '|', if(NEW.prefix_id is null,'',NEW.prefix_id) '|', if(NEW.postfix_id is null,'',NEW.postfix_id)) 
     ); 
END// 
DELIMITER ; 
SET [email protected]_SQL_MODE; 

我不断收到一个错误(1583)Incorrect parameters in the call to concat。 如果我不使用if(NEW.prefix_id is null,'',NEW.prefix_id)而只是使用NEW.prefix_id,它可以很好地工作。但是这个字段可以是null,所以所有的concat的结果都变成null

那么,问题是我该如何使用IFCONCAT内调用sta staments?

回答

3

那是因为你以后if(NEW.prefix_id is null,'',NEW.prefix_id)尝试忘记一个comma

​​
+0

哦,我笨。谢谢! – k102 2012-08-02 11:29:39

2

你的IF后失踪一个逗号。一旦这个是固定的,这将是更好地使用COALESCE代替(或IFNULL如果你喜欢):

COALESCE(NEW.prefix_id, '') 
+0

谢谢你,不知道这些功能 – k102 2012-08-02 11:30:12

0

查询是因为你的inline IF语句后失踪comma的无效。

concat(NEW.id ,'|', NEW.`contents`, '|', 
     NEW.channel_id, '|', NEW.name, '|', NEW.hidden, '|', 
     if(NEW.prefix_id is null,'',NEW.prefix_id) '|', 
     --          ^error here 
     if(NEW.postfix_id is null,'',NEW.postfix_id)) 

它必须是

concat(NEW.id ,'|', NEW.`contents`, '|', 
     NEW.channel_id, '|', NEW.name, '|', NEW.hidden, '|', 
     if(NEW.prefix_id is null,'',NEW.prefix_id), '|', 
     if(NEW.postfix_id is null,'',NEW.postfix_id)) 
+0

是的,但@Omesh更快 – k102 2012-08-02 11:37:49