Продолжаем разговор.
В общем, получилась такая вот штука
DELIMITER //
CREATE FUNCTION TEST_CmdExec2(msg_match TEXT, row_id INT, cmd_exec TEXT, cmd_param TEXT)
RETURNS TEXT
BEGIN
DECLARE msg TEXT;
DECLARE mycmd TEXT;
DECLARE cmderrcode TEXT;
DECLARE ret_str TEXT;
SET msg=(SELECT Message FROM Syslog.SystemEvents WHERE ID=row_id);
IF msg LIKE msg_match THEN SET mycmd=CONCAT(cmd_exec,msg,cmd_param);
ELSE SET mycmd=CONCAT(cmd_exec,'NOT FOUND',cmd_param);
END IF;
SET cmderrcode=(SELECT sys_exec(mycmd));
RETURN mycmd;
END //
DELIMITER ;
Вызывается так вот примерно
select `Syslog`.`TEST_CmdExec2`('%Routed to%', 25503462, 'echo "', '" >> /tmp/test_mysql3')
Но есть проблема.
Если задавать команду в явном виде в теле фукнции (подставляется только текст сообщения в середине), то все нормально:
Вот так вот работает:
SET mycmd=CONCAT( 'echo "',msg,'" >> /tmp/test_mysql3');
А если подставлять параметры, передающиеся в функцию, то оно в конец имени файла при создании добавляет какие-то гомические символы (? например или чего похуже).
Т.е. вот так вот не работает (как надо):
SET mycmd=CONCAT(cmd_exec,msg,cmd_param);