Я пытаюсь написать хранимую процедуру MySQL, которая принимает запрос SELECT
и выполняет его для списка баз данных. Это возможно даже с MySQL?
Каждый клиент в нашем приложении имеет свою собственную базу данных в одном экземпляре. Все базы данных клиентов идентичны по своей структуре схемы. Иногда мне нужно выполнить простой запрос SELECT, но по всем базам данных клиентов (например, SELECT COUNT(*) FROM users
).
У меня есть хранимые процедуры для часто повторяющихся запросов «на уровне экземпляра», таких как подсчет пользователей, но я не хочу создавать больше таких для одноразовых запросов (например, запрос поврежденных записей из-за ошибочного кода, запрос для столбцов, которые мы планируем объявить устаревшими и т. д.).
Мое текущее решение состоит в том, что у меня есть сценарий node
, который я запускаю локально, чтобы генерировать запросы SELECT для каждой базы данных, а затем объединять их все, используя UNION
, чтобы сгенерировать гигантский запрос, который я затем выполняю для экземпляра базы данных.
SELECT 'customerdb1' AS customer,
COUNT(*) AS user_count
FROM customerdb1.users
UNION
SELECT 'customerdb2' AS customer,
COUNT(*) AS user_count
FROM customerdb2.users
UNION
SELECT 'customerdb3' AS customer,
COUNT(*) AS user_count
FROM customerdb3.users