2012-03-28 43 views
0

请帮我一把。我将一个字符串插入到mysql数据库表中的列中。但由于我使用的是预定义的API来插入表格,我需要一个触发器来帮助将字符串解析到其余列中。这个mySQL触发语法是否正确?

字符串在长相未来这样的:((管理员))[[的clientId]] >>>更新客户资料

该字符串将被插入到该列 '消息'。但是我想在该表中插入3个其他列:user_id,client_id &操作。所以我需要将消息解析为3个不同的字符串,以便将它们放入正确的列中。

这是我有,这是正确的?

CREATE TRIGGER 'parse_log4j_message' BEFORE INSERT ON 'util_audit' 
FOR EACH ROW BEGIN 
select NEW.MESSAGE into @message; //adding String into this variable 
    select LEFT(message, 1) from table into @firstChar; //get first Char in Message 
IF strcmp(@firstChar,'(') = 0 THEN //if first char is '(', then message is correct 
    SELECT SUBSTRING_INDEX(@message, ')', 2) into @userId; //-> admin 
    SELECT SUBSTRING_INDEX(@message, ']', 2) into @tempClientId; 
    SELECT SUBSTRING_INDEX(@message, '[', -1) into @clientId; //-> clientId 
    SELECT SUBSTRING_INDEX(@message, '>', -1) into @action; //-> the rest of the message 
    SET NEW.USER_ID = @userId; // set into the columns of the table 
    SET NEW.CLIENT_ID = @clientId; 
    SET NEW.ACTION = @action; 
END IF; 
END; 

回答

2

试试这个解析脚本首先 -

SET @message = '((admin)) [[clientId]] >>>Update client Profile'; 

SET @userId = SUBSTRING_INDEX(SUBSTRING_INDEX(@message, '))', 1), '((', -1); 
SET @clientId = SUBSTRING_INDEX(SUBSTRING_INDEX(@message, ']]', 1), '[[', -1); 
SET @action = SUBSTRING_INDEX(@message, '>>>', -1); 

SELECT @userId, @clientId, @action; 

+---------+-----------+-----------------------+ 
| @userId | @clientId | @action    | 
+---------+-----------+-----------------------+ 
| admin | clientId | Update client Profile | 
+---------+-----------+-----------------------+ 

如果这是正确的,那么这个解决方案添加到您的触发器。