符合多个数据库的在线SQL语法检查器


67

在线上是否有任何站点可用于验证符合多个数据库的语法?

例如:如果我有一个带有'usage'关键字的SQL语句,那么该站点应该抛出一个错误,提示说'usage'关键字在MYSQL中已保留?


Answers:


21

你可以尝试像格式化这个

它们始终受到限制,因为它们不知道(并且不知道)您可能在数据库中定义了哪些用户定义的函数(或您有权或无法访问的内置函数)。

您还可以查看ANTLR(但这将是一个脱机解决方案)


Gary,它可以是任何用户定义的函数,我的意思是在SQL脚本中的任何位置,如果它找到任何数据库类型的关键字,它都会引发我所期望的错误。
Phani

2
@Phani:甚至很难说什么是保留关键字。这是11gR2的Oracle保留关键字的正式列表,但是测试表明其中一些并不是真正保留的。例如notfoundarraylensqlbufrowlabel不应该工作作为列名,但他们做的。100%的解决方案几乎肯定是不可能的。您可能需要添加更多有关您正在做的事情以及所需精度的详细信息。
乔恩·海勒

我是一名Java开发人员,正在构建框架,因此,由于缺乏专业知识,我在存储库中添加了一条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

但是,在线工具不会自动检查每个数据库,您需要手动运行每个数据库。我也不能说检查语法有多好。您需要进行自我调查。



3

我不知道任何这样的事,而我的经验是它目前不存在。大多数是两个数据库的并排比较。这些信息需要遇到的所有数据库中的专家,这并不常见。版本也取决于要知道支持什么。

ANSI函数正在迈步以确保跨数据库支持语法,但它取决于实施规范的供应商。到目前为止,他们还没有一次实现整个ANSI规范。

但是,您可以通过提出特定问题,并包括所涉及的数据库和所使用的版本,来在此类站点上聚集资源。


2

我愿意打赌我的一些声誉,说没有这样的事情。

部分原因是,如果您担心跨平台SQL兼容性,那么最好的选择就是使用一些API或ORM工具来抽象您的数据库代码,这些API或ORM工具会为您处理这些事情,并且得到了很好的支持,因此将处理较新的数据库版本他们出来。

可用的确切API取决于您的编程语言/平台。例如,PHP具有Pear:DB等,我个人发现在Django框架中实现了相当不错的Python ORM功能。我认为在其他平台上也应该有一些可用的东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.