Я новичок в пользовательских переменных в MySQL и столкнулся с некоторыми ошибками при попытке использовать их для чего-либо, кроме оператора SELECT.Я пытаюсь запустить пакетное задание для удаления временных представлений, созданных в моей базе данных.Процесс:
Шаг 1: определить временные представления и поместить список в переменную.
Шаг 2: проверить переменную, чтобы определить, является ли она нулевой
Шаг3: отбросить представления
Проблема 1: отбрасывание не работает, даже если я не проверяю на ноль.Я получаю это сообщение: ОШИБКА 1064 (42000) в строке 13: у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с @VIEWLIST_PRE в строке 1
Проблема 2: нулевой тест не работает, когда включен.Я получаю эту ошибку: mysql: [Предупреждение] Использование пароля в интерфейсе командной строки может быть небезопасным.ОШИБКА 1064 (42000) в строке 12: у вас есть ошибка в вашем синтаксисе SQL;обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'IF (@VIEWLIST_PRE IS NULL) THEN DROP VIEW @VIEWLIST_PRE' в строке 1
Ниже приведен код.Как это должно быть написано для работы?Я очень ценю помощь!Спасибо !!
SET SESSION group_concat_max_len = 18446744073709551615;
-- Get the PreSummary views
SET @VIEWLIST_PRE = (SELECT
CONCAT(
GROUP_CONCAT(TABLE_NAME)
) AS stmt
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "raptor" AND TABLE_NAME LIKE "%Pre%");
SELECT @VIEWLIST_PRE; -- THIS WORKS!
IF(@VIEWLIST_PRE IS NULL) THEN -- BREAKS
DROP VIEW @VIEWLIST_PRE; -- BREAKS
END IF;
* РЕШЕНИЕ *
Я подправил решение Used_By_Already (только одна команда может быть выполнена за раз вподготовлено заявление, из чего я получаю).Вот окончательный код для массовой DROP:
SET @VIEWLIST_PRE = (SELECT
CONCAT(
GROUP_CONCAT(TABLE_NAME)
) AS stmt
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "raptor" AND TABLE_NAME LIKE "%Pre%");
SET @DROP_VIEW_PRE = CONCAT('DROP VIEW IF EXISTS ', @VIEWLIST_PRE);
PREPARE stmt1 FROM @DROP_VIEW_PRE;
EXECUTE stmt1;
Был задан хороший вопрос о том, почему целевое снижение не используется.Причина в том, что он не выполняется успешно из PHP, но не было получено никакой ошибки.Однако после долгих поисков я обнаружил проблему и теперь могу выполнить целевое удаление.