请帮帮我。我正在将一个String插入mysql db表中的一列。但由于我使用预定义的API插入表中,我需要一个 Trigger 来帮助将字符串解析为其余的列。
进入的字符串如下所示:((admin))[[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;
答案 0 :(得分: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 |
+---------+-----------+-----------------------+
如果这是正确的,请将此解决方案添加到触发器中。