SQLite-基于sqlite_master的查询的一个班轮/命令放置表?

时间:2019-03-22 01:49:10

标签: sql sqlite

我有一个名为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)之类的操作,但是在第一个左括号中出现语法错误。我想做的事有可能吗?

1 个答案:

答案 0 :(得分:0)

据我所知,SQLite不支持动态SQL查询,这是您要做的事情。一种解决方法是从应用程序语言(例如Java,Python,Node.js)对sqlite_master进行选择调用,然后使用代码构建删除查询。