Форум системных администраторов

IT => Software => СУБД => Тема начата: diggerzz от 20 апреля 2015, 15:30:32

Название: MySQL IF...THEN...ELSE
Отправлено: diggerzz от 20 апреля 2015, 15:30:32
Помогите разобраться с синтаксисом IF в MySQL

В MySQL Workbench нужно для тестов сделать примерно такую последовательность.
SET @msgtext = (SELECT Message FROM Syslog.SystemEvents WHERE ID=10) ;
IF @msgtext LIKE 'bebebe lalala%' THEN
SET @mycmd=CONCAT('echo "',@msgtext,'" >> /tmp/test_mysql2');
ELSE SET @mycmd=CONCAT('echo "NOTHING" >> /tmp/test_mysql2');
END IF;
SELECT sys_exec(@mycmd);

Как ни пробовал, не работает IF, синтакс еррор говорит. :(
Название: MySQL IF...THEN...ELSE
Отправлено: autumn от 20 апреля 2015, 15:39:00
IF @msgtext LIKE 'bebebe lalala%' THEN
Ну и мне чот видица, что ты с лайком здесь погорячился. Сомневаюсь я, что сие там возможно.


Updated: 20 April 2015, 15:42:04

И для тех кто пейсатель, а не читатель.
https://dev.mysql.com/doc/refman/5.7/en/if.html
Название: MySQL IF...THEN...ELSE
Отправлено: shurutov от 20 апреля 2015, 16:38:32
diggerzz, если не думать то  можно попытаться воспользоваться ф-ей IF(). Навскидку, оно как бы более подходит. А если подумать...
Название: MySQL IF...THEN...ELSE
Отправлено: diggerzz от 22 апреля 2015, 10:57:31
Продолжаем разговор.

В общем, получилась такая вот штука
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);