Добрый день,MYSQL: Ошибка присоединения 2 Выберите утверждения, которые включают в себя хранимую функцию
Я создал хранимую функцию, чтобы эмулировать поведение «SHOW ГРАНТЫ ДЛЯ» команды в MySQL. Определение сценария выглядит следующим образом:
CREATE FUNCTION get_grants(p_user text, p_host text, p_type text, p_obj text)
RETURNS text
NOT DETERMINISTIC
READS SQL DATA
BEGIN
...
END;
Если я использую функцию в инструкции выбора, она выполнена правильно. Например:
SELECT User as USER, Host as HOST,
'GLOBAL' as PRIV_TYPE, NULL as DATABASE_NAME,
mydatabase.get_grants(User, Host, 'GLOBAL', '') as PRIVILEGES
FROM mysql.user
Однако, когда я использую UNION или UNION ALL заявление присоединиться 2 выберите заявления, которые вызывают функцию с различными значениями параметров, например:
SELECT User as USER, Host as HOST,
'GLOBAL' as PRIV_TYPE, NULL as DATABASE_NAME,
mydatabase.get_grants(User, Host, 'GLOBAL', '') as PRIVILEGES
FROM mysql.user
UNION ALL
SELECT User as USER, Host as HOST,
'DB' as PRIV_TYPE, Db as DATABASE_NAME,
mydatabase.get_grants(User, Host, 'DB', Db) as PRIVILEGES
FROM mysql.db
ORDER BY USER, HOST, DATABASE_NAME IS NULL, DATABASE_NAME;
I получите следующую ошибку: # 1222 - Используемые операторы SELECT имеют различное количество столбцов.
Может ли кто-нибудь объяснить, что здесь происходит и как решить эту проблему?
Заранее спасибо.