在线SQL语法检查器,适用于多个数据库

68

有没有在线可用的网站可以验证符合多个数据库语法的语句?

例如:如果我有一个带有“usage”关键字的SQL语句,那么该网站应该会抛出一个错误,提示我“usage”关键字在MYSQL中是保留字。


类似问题:https://dev59.com/EGsz5IYBdhLWcg3wpZlF - Randall Cook
6个回答

21

你可以尝试使用像这个格式化程序。

它们总是会受到限制,因为它们不知道(也无法知道)您在数据库中定义了哪些用户定义函数(或者您是否具有或者没有访问内置函数)。

你也可以看看 ANTLR (但那将是一个离线解决方案)。


Gary,这可能是任何用户定义的函数,我的意思是在SQL脚本的任何位置,如果它发现任何数据库类型的关键字,它应该引发一个错误,这就是我期望的。 - Phani
2
@Phani:很难说什么是保留关键字。这里是 Oracle 11gR2 保留关键字 的官方列表,但测试表明其中一些并不是真正的保留关键字。例如 notfoundarraylensqlbufrowlabel 不应该作为列名而工作,但它们确实能够工作。100% 的解决方案几乎肯定是不可能的。你可能需要添加更多关于你正在做什么以及需要多少精度的细节。 - Jon Heller
我是一名Java开发人员,正在构建一个框架。由于经验不足,我将一个SQL语句添加到了代码库中,结果导致了框架出现问题。因此,从下次开始,我想将这个输入提供给任何在线网站来验证它是否包含任何保留字。希望我回答了你的问题。 - Phani

7

尝试过了,但只能识别 SQL 语法问题,无法识别保留关键字/函数。 - Phani

5
我从未看到过这样的东西,但是有一个开发工具包,其中包括了Oracle、MySQL、DB2和SQL Server的语法检查器...http://www.sqlparser.com/index.php 然而,这似乎只是库。您需要构建一个应用程序来利用解析器完成您想要的任务。企业版包含所有数据库,价格为450美元... 哎呀!
编辑:之后,看起来有人可能已经使用那个库做了你想要的事情:http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl 在线工具不能自动针对每个数据库进行检查,您需要手动运行每个数据库。我也不能保证它检查语法的效果如何。这是需要您自己去调查的。

4

链接纯粹基于SQL标准,不受标准数据库组织(MySQL、Oracle等)使用不同关键字的限制。这是一个很好的开始,但不是我要找的。感谢回复。 - Phani

3
我不知道有这样的工具存在,而且我的经验是目前并没有这样的工具。大多数工具都是对比两个数据库的信息。这需要了解所有涉及到的数据库的专家,这并不常见。版本也很重要,需要知道什么被支持。
ANSI函数正在努力确保语法在各个数据库中得到支持,但这取决于供应商是否实现规范。迄今为止,他们没有一次性实现整个ANSI规范。
但是你可以在像这个网站这样的地方通过提出具体问题并包括涉及的数据库和使用的版本来进行众包。

2

我愿意打赌我的一些声誉,说这种事情根本不存在。

部分原因是,如果你担心跨平台 SQL 兼容性,那么你最好使用一些 API 或 ORM 工具来抽象化你的数据库代码,这些工具可以为你处理这些问题,并且得到良好的支持,所以可以处理新版本的数据库。

可用的 API 的确切类型将取决于您的编程语言/平台。例如,PHP 有 Pear:DB 和其他工具,我个人发现 Python 中实现的 ORM 特性在 Django 框架 中非常好用。我想其他平台上也应该有类似的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接