3

トリガーを作成するために使用しようとしているコードは次のとおりです。

-- Dumping structure for trigger kavanga_lead.click_links_insert
DROP TRIGGER IF EXISTS `click_links_insert`;
SET @OLD_SQL_MODE=@@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 SQL_MODE=@OLD_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になります。

だから、問題は、コールIF内でどのようにステーションを使用できるかということです。CONCAT

4

3 に答える 3

5

commaそれはあなたが試した後に1つを忘れたからですif(NEW.prefix_id is null,'',NEW.prefix_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))
于 2012-08-02T11:27:05.507 に答える
2

の後にコンマがありませんIF。これが修正されたら、代わりにCOALESCE(または必要に応じてIFNULL)を使用することをお勧めします。

COALESCE(NEW.prefix_id,  '')
于 2012-08-02T11:28:32.060 に答える
0

ステートメントのcomma後に欠落しているため、クエリは無効です。inline IF

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))
于 2012-08-02T11:32:48.040 に答える