2

У меня есть следующая функция, которая используется в нескольких базах данных на моем сервере.

CREATE FUNCTION `fn_strings_intersect`(arg_str1 VARCHAR(255), arg_str2 VARCHAR(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
    SET arg_str1 = CONCAT(arg_str1, ",");
    SET @var_result = "";

    WHILE(INSTR(arg_str1, ",") > 0)
    DO
        SET @var_val = SUBSTRING_INDEX(arg_str1, ",", 1);
        SET arg_str1 = SUBSTRING(arg_str1, INSTR(arg_str1, ",") + 1);

        IF(FIND_IN_SET(replace(@var_val, ' ', ''), arg_str2) > 0)
        THEN
            SET @var_result = CONCAT(@var_result, @var_val, ",");
        END IF;
    END WHILE;

    IF (@var_result = "")
    THEN
      RETURN false;
    ELSE
      RETURN true;
    END IF;
END;

Периодически, и непредсказуемым образом, функция сбрасывается во все базы данных.

Есть ли что-то в функции или, возможно, в моей конфигурации MySQL, которая может / может привести к удалению этой функции?

2 ответа2

4

Вы случайно не используете --skip-grant-tables при запуске своего демона?

Из документации для CREATE FUNCTION

Активная функция - это функция, которая была загружена с помощью CREATE FUNCTION и не удалена с помощью DROP FUNCTION. Все активные функции перезагружаются при каждом запуске сервера, если вы не запускаете mysqld с опцией --skip-grant-tables.

2

На первый взгляд, функция кажется достаточно безвредной, но мне интересно, что произойдет, если она вызовет исключение во время выполнения. Я не знаю MySQL достаточно хорошо, чтобы предсказать, что он будет делать - насколько я знаю, он может сбросить или отключить функцию.

Случайной частью того, когда это происходит, могут быть некоторые странные и редкие параметры, которые вы не предвидели, которые вызывают исключение.

Вы можете проверить пустую функцию с тем же именем. Если эта функция не показывает проблему, это может указывать на наличие проблемы во время выполнения.

Вторым тестом будет добавление обработчика ошибок в функцию, чтобы увидеть, исчезнет ли проблема.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .