街上的消息是 Perl 不是由规范定义的,而是由当前解释器版本碰巧接受的任何东西定义的。现在,让我们考虑像 TSQL 这样的 SQL 方言。是否有已发布的规范允许使验证器等效于 SQL Server 内部的验证器?是否已经存在这样的开源验证器?甲骨文也有同样的问题。
好的,所以对于 MySQL,我猜验证器可以直接从 MySQL 代码库中提取。尽管如此,如果我想制作自己的验证器,他们是否实际上会发布规范本身?
街上的消息是 Perl 不是由规范定义的,而是由当前解释器版本碰巧接受的任何东西定义的。现在,让我们考虑像 TSQL 这样的 SQL 方言。是否有已发布的规范允许使验证器等效于 SQL Server 内部的验证器?是否已经存在这样的开源验证器?甲骨文也有同样的问题。
好的,所以对于 MySQL,我猜验证器可以直接从 MySQL 代码库中提取。尽管如此,如果我想制作自己的验证器,他们是否实际上会发布规范本身?
您似乎知道如何为 MySQL 做些什么。除了 Oracle 主要实现 ANSI SQL 和 SQL 的 PL/SQL 过程语言扩展之外,我真的不能说太多关于Oracle 9i 的信息。
对于 SQL Server:
Microsoft Books On Line (BOL) 是官方参考规范。但是,不同版本的 SQL Server 有不同的页面。有一些与此相关的项目。 http://www.sqlparser.com/ - 这有适用于 Oracle、DB2、Mysql 和 SQL Server / Sybase (T-SQL) 的 .NET、Java、COM 和 VCL 版本。价格也相当合理。
http://www.codeproject.com/Articles/1136/SharpHSQL-An-SQL-engine-written-in-C (c#)
http://antlr.org/ - 这看起来是个不错的选择。
我经常使用这个网站来格式化 SQL,但它也做了一些验证,虽然它相当粗糙: http ://www.dpriver.com/pp/sqlformat.htm
这是一个类似的网站: http ://www.tsqltidy.com/
我建议为 SQL 编写一个验证器,即使只是其中一个变体也是一项艰巨的任务。您可以查看 ANSI SQL 的各种 ISO/IEC 标准。ANSI SQL-92 被广泛实施,但也有一个 SQL:2008 标准。但是,您必须为这些标准的文档付费,而且它们并不便宜。
祝你好运。