如何使用存储过程删除mysql数据库中的所有视图?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用存储过程删除mysql数据库中的所有视图?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1286字,纯文字阅读大概需要2分钟。
内容图文
![如何使用存储过程删除mysql数据库中的所有视图?](/upload/InfoBanner/zyjiaocheng/894/d22755fcc2114d16829c26366aa2f321.jpg)
我希望我的mysql服务器删除数据库中的所有视图.我已经为存储过程创建了一个事件:
开始
DECLARE done INT DEFAULT FALSE;
DECLARE VIEW_NAME CHAR(255);
DECLARE VIEW_NAMES CURSOR FOR SELECT table_name FROM information_schema.views;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN VIEW_NAMES;
read_loop: LOOP
FETCH VIEW_NAMES INTO VIEW_NAME;
IF done THEN
LEAVE read_loop;
END IF;
DROP VIEW VIEW_NAME;
END LOOP;
CLOSE VIEW_NAMES;
结束
但是,此过程会产生以下错误:
Error Code: 1051. Unknown table ‘view_name’
我的猜测是我的fetch语句由于某种原因没有获取.所以我检查了select语句,它确实有一个结果集.任何有关如何解决错误或如何在mysql数据库中删除所有视图的想法?
解决方法:
您需要使用prepared statements来执行这些查询.构建字符串’DROP VIEW …’,然后使用预准备语句执行语句.
例如 –
...
read_loop: LOOP
FETCH VIEW_NAMES INTO VIEW_NAME;
IF done THEN
LEAVE read_loop;
END IF;
SET @query = CONCAT('DROP VIEW ', VIEW_NAME);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
...
另一个变种,没有打开光标:
SET @views = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @views
FROM information_schema.views
WHERE table_schema = 'database_name';
SET @views = CONCAT('DROP VIEW ', @views);
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
…根据需要修改WHERE条件.
内容总结
以上是互联网集市为您收集整理的如何使用存储过程删除mysql数据库中的所有视图?全部内容,希望文章能够帮你解决如何使用存储过程删除mysql数据库中的所有视图?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。