Я использую Mysql 8. В одном из представлений, над которыми я работаю, используется функция calculateGP
. Я хочу изменить эту функцию, но не уверен, используется ли эта функция где-нибудь в базе данных. Есть ли запрос, который я могу выполнить, чтобы узнать, где еще в базе данных есть ссылка на функцию?
В итоге я взял структурный дамп mysql и стал искать имя функции в сценарии, чтобы найти вхождения.
@TimBiegeleisen Изменение функции может привести к тому, что другие представления, которые могут использовать ту же функцию, сломают / изменят свой результат. Не хочу вызывать непреднамеренные результаты в этих просмотрах
@Kasun. Вы можете добавить это как ответ на свой вопрос, и через несколько дней вам будет разрешено принять его как принятый ответ. Таким образом, вопрос не попадет в списки неотвеченных вопросов :)
Сделаю. Однако это альтернативный метод, а не прямое решение вопроса. Я сохраню этот метод как принятый ответ, пока кто-нибудь не предоставит лучший вариант. :)
Мне удалось найти ссылки на функцию calculateGP
, взяв структурный дамп MySQL базы данных и выполнив текстовый поиск в файле дампа. Это альтернативный метод поиска ссылок в базе данных без выполнения запроса MySQL.
Я бы сделал это:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%`calculateGP`%'
Это может привести к обнаружению ложных совпадений, если у вас есть таблицы, столбцы или другие идентификаторы, которые также имеют имя calculateGP
.
Хорошо, это дает имена представлений, которые используют эту функцию. Просто убедитесь, что вы запускаете запрос с достаточными привилегиями, чтобы увидеть все определения представлений в таблице information_schema.VIEWS
. Также можно увидеть, используют ли какие-либо триггеры функцию, выполнив тот же запрос в столбце ACTION_STATEMENT
в таблице information_schema.TRIGGERS
.
чтобы проверить, используется ли он в другой функции или процедуре, можно использовать столбец ROUTINE_DEFINITION
в столбце information_schema.ROUTINES
Зачем тебе это нужно знать?