我有一个名为HelpfulStats.sqlite3
的数据库,该数据库存储有关其所属软件的运行日期的有用统计信息。
在HelpfulStats.sqlite3
内,有一些表遵循如下命名约定:stats_YYMMDD
。在软件启动期间,我检查HelpfulStats.sqlite3
的文件大小是多少,如果超过了设置的大小阈值,我会在其上调用VACUUM
,检查它是否仍然太大,然后如有必要,我运行查询以删除最旧的stats_
表。
我通过使用SELECT [tbl_name] FROM sqlite_master WHERE type='table' AND [tbl_name] LIKE 'stats_%' ORDER BY [tbl_name] ASC LIMIT 1
成功找到了最早的表。但是,我似乎无法弄清楚如何将SELECT结果传递给DROP TABLE命令。有可能吗?
我可以轻松地使它们成为两个单独的查询,一个用于捕获SELECT的结果,然后一个以该表名作为参数执行DROP,但我想知道是否有可能做到这一点完全在一次SQL执行中。
我尝试过类似DROP TABLE (SELECT [tbl_name] FROM sqlite_master WHERE type='table' AND [tbl_name] LIKE 'stats_%' ORDER BY [tbl_name] ASC LIMIT 1)
之类的操作,但是在第一个左括号中出现语法错误。我想做的事有可能吗?
答案 0 :(得分:0)
据我所知,SQLite不支持动态SQL查询,这是您要做的事情。一种解决方法是从应用程序语言(例如Java,Python,Node.js)对sqlite_master
进行选择调用,然后使用代码构建删除查询。