如何检查SQLite3语法?
有没有办法在不运行SQLite3脚本的情况下检查其语法 基本上,我正在寻找SQLite3的等价物如何检查SQLite3语法?,sqlite,syntax-checking,Sqlite,Syntax Checking,有没有办法在不运行SQLite3脚本的情况下检查其语法 基本上,我正在寻找SQLite3的等价物ruby-cscript.rb,perl-cscript.pl,php--syntax-check-script.php,等等 我曾想过使用explain,但我想检查的大多数脚本都是为了参考而保留的(不一定有关联的数据库)。使用explain也会使它难以与类似的东西一起使用。(也就是说,我只想检查语法,而不是语义。) 更新: 我很困惑。假设我要检查以下语法: select * from foo; 我
ruby-cscript.rb
,perl-cscript.pl
,php--syntax-check-script.php
,等等
我曾想过使用explain
,但我想检查的大多数脚本都是为了参考而保留的(不一定有关联的数据库)。使用explain
也会使它难以与类似的东西一起使用。(也就是说,我只想检查语法,而不是语义。)
更新:
我很困惑。假设我要检查以下语法:
select * from foo;
我可以这样做:
echo 'explain select * from foo;' | sqlite3
但我得到:
SQL error near line 1: no such table: foo
我希望看到的只是“语法OK”(或类似的东西)。这可能吗?您可能可以对内存中的数据库使用EXPLAIN。使用sqlite3,您可以通过将“:memory:”作为文件名传递给sqlite3\u open\u v2(),来获取内存中的数据库。如您所述,您可以使用关键字。如果省略前面的EXPLAIN关键字,它将返回有关如何执行语句的信息。到目前为止,Ruby gem是一个非常适合我的语法检查器 它检查ANSI SQL:它不是特定于
sqlite
方言的
2015年,在这个问题被提出5年后,它问世了
它需要Ruby和C编译器(来构建pg_查询
native扩展)
以下是一个输出示例:
$sqlint ex7a.sql
ex7a.sql:81:10:错误语法错误位于或接近“*”
在真正的Unix传统中,如果语法正确,sqlint不会生成任何输出。正如提问者所问,它不会检查表是否存在。这接近我的想法:谢谢分享!几周前我意识到了
sqlint
,但你的回答让我实际安装并试用了它。