Автор Тема: MySQL IF...THEN...ELSE  (Прочитано 4572 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн diggerzz

  • Пользователь
  • **
  • Сообщений: 75
  • Рейтинг: 4
  • Пол: Мужской
  • Простой и добрый либерал
    • Просмотр профиля
  • Откуда: Москва
MySQL IF...THEN...ELSE
« : 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, синтакс еррор говорит. :(

Оффлайн autumn

  • Модераторы
  • Старожил
  • *****
  • Сообщений: 502
  • Рейтинг: 11
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Москва
MySQL IF...THEN...ELSE
« Ответ #1 : 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
Это щто ?

Оффлайн shurutov

  • Постоялец
  • ***
  • Сообщений: 326
  • Рейтинг: 3
  • Пол: Мужской
    • mshurutov@jabber.ru
    • Просмотр профиля
  • Откуда: СССР
MySQL IF...THEN...ELSE
« Ответ #2 : 20 апреля 2015, 16:38:32 »
diggerzz, если не думать то  можно попытаться воспользоваться ф-ей IF(). Навскидку, оно как бы более подходит. А если подумать...
С уважением,
Шурутов Михаил.

Онлайн diggerzz

  • Пользователь
  • **
  • Сообщений: 75
  • Рейтинг: 4
  • Пол: Мужской
  • Простой и добрый либерал
    • Просмотр профиля
  • Откуда: Москва
MySQL IF...THEN...ELSE
« Ответ #3 : 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);