符合多个数据库的在线 SQL 语法检查器 [关闭]
Posted
技术标签:
【中文标题】符合多个数据库的在线 SQL 语法检查器 [关闭]【英文标题】:Online SQL syntax checker conforming to multiple databases [closed] 【发布时间】:2011-06-28 06:53:54 【问题描述】:是否有任何在线网站可用于验证符合多个数据库的语法?
例如:如果我有一个带有“usage”关键字的 SQL 语句,那么网站应该向我抛出一个错误,说“usage”关键字在 mysql 中是保留的?
【问题讨论】:
类似问题:***.com/questions/7753081/… 【参考方案1】:我愿意拿我的一些名誉打赌,没有这样的事情。
部分是因为如果您担心跨平台 SQL 兼容性,最好的选择是使用一些 API 或 ORM 工具来抽象您的数据库代码,为您处理这些事情,并且得到很好的支持,所以会处理更新的数据库版本。
您可以使用的具体 API 类型取决于您的编程语言/平台。例如,php 有 Pear:DB 等,我个人发现在Django framework 中实现了相当不错的 Python 的 ORM 功能。我想其他平台上也应该有一些这样的东西。
【讨论】:
【参考方案2】:你试过http://www.dpriver.com/pp/sqlformat.htm吗?
【讨论】:
试过了,但它只识别 SQL 语法问题,而不是保留的关键字/函数。【参考方案3】:我从来没有见过这样的东西,但是有这个开发工具,包括一个用于 oracle、mysql、db2 和 sql server 的语法检查器...http://www.sqlparser.com/index.php
但这似乎只是图书馆。你需要构建一个应用程序来利用解析器来做你想做的事。包含所有数据库的企业版将花费您 450 美元……哎呀!
编辑: 而且,在说完之后 - 看起来有人可能已经使用该库完成了您想要的操作:http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl
不过,在线工具不会自动检查每个数据库,您需要手动运行每个数据库。我也不能说它在检查语法方面有多好。你需要自己调查。
【讨论】:
【参考方案4】:你可以试试像this这样的格式化程序
他们将始终受到限制,因为他们不(也不可能)知道您可能在数据库中定义了哪些用户定义的函数(或者您有权或无权访问哪些内置函数)。
您也可以查看 ANTLR(但那将是一个离线解决方案)
【讨论】:
Gary,它可以是任何用户定义的函数,我的意思是在 SQL 脚本中的任何位置,如果它找到任何数据库类型的关键字,它应该会引发错误,这是我所期待的为。 @Phani:甚至很难说什么是保留关键字。这是 11gR2 的 Oracle reserved keywords 的官方列表,但测试表明其中一些并不是真正保留的。例如,notfound
、arraylen
、sqlbuf
、rowlabel
不应用作列名,但它们可以。几乎可以肯定,100% 的解决方案是不可能的。您可能需要添加更多详细信息,说明您正在做什么以及需要多少准确度。
我是一名 Java 开发人员,正在构建框架,因此,由于缺乏专业知识,我在存储库中添加了一条 SQL 语句,从而使框架变得模糊。所以,从下一次开始,我想将该输入提供给任何在线网站,以验证它是否包含任何保留字。我希望我回答了你的问题。【参考方案5】:
我不知道有这样的,我的经验是它目前不存在。大多数是两个数据库的并排比较。该信息需要所遇到的所有数据库中的专家,这并不常见。版本也取决于,以了解支持什么。
ANSI 函数在确保跨数据库支持语法方面取得了长足的进步,但这取决于实施规范的供应商。迄今为止,他们并没有一次实现整个 ANSI 规范。
但是您可以通过询问具体问题并包括所涉及的数据库和使用的版本来在此类网站上众筹。
【讨论】:
【参考方案6】:只知道这个。不知道它对 MySQL 的效果如何http://developer.mimer.se/validator/
【讨论】:
该链接纯粹基于 SQL 标准,与标准无关的数据库组织(MySQL、Oracle 等)由于限制而倾向于使用不同的关键字。这是一个好的开始,但不是我想要的。感谢您的回复。以上是关于符合多个数据库的在线 SQL 语法检查器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008r2 检查语法的下划线没有显示出来怎么办
(在线等,linq,vs2008,sql2005)错误提示:The underlying provider failed on Open.