我是MySQL用户变量的新手,尝试将其用于SELECT语句以外的其他操作时遇到了一些错误。我正在尝试运行批处理作业以删除在数据库中创建的临时视图。该过程是:
步骤1:识别临时视图并将列表放入变量中。
步骤2:测试变量以查看其是否为空
步骤3:删除视图
问题1:即使我不测试null,删除操作也不起作用。我收到此消息:第13行的错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的'@VIEWLIST_PRE'附近使用
问题2:如果包含null测试,则该测试不起作用。我收到此错误:mysql:[警告]在命令行界面上使用密码可能不安全。第12行的错误1064(42000):您的SQL语法有错误;在第1行的'IF(@VIEWLIST_PRE IS NULL)THEN DROP VIEW @VIEWLIST_PRE'附近使用与您的MySQL服务器版本对应的手册,以获取正确的语法,以在'IF(@VIEWLIST_PRE IS NULL)附近使用
下面是代码。必须如何编写才能起作用?我非常感谢您的帮助!谢谢!!
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成功执行,但未收到错误。但是,经过大量搜索后,我发现了问题,现在可以进行有针对性的丢弃。
我调整了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成功执行,但是没有收到错误。但是,经过大量搜索后,我发现了问题,现在可以进行有针对性的丢弃。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句