【发布时间】:2011-06-28 06:53:54
【问题描述】:
是否有任何在线网站可用于验证符合多个数据库的语法?
例如:如果我有一个带有“usage”关键字的 SQL 语句,那么网站应该向我抛出一个错误,说“usage”关键字在 MYSQL 中是保留的?
【问题讨论】:
标签: mysql sql-server oracle postgresql
是否有任何在线网站可用于验证符合多个数据库的语法?
例如:如果我有一个带有“usage”关键字的 SQL 语句,那么网站应该向我抛出一个错误,说“usage”关键字在 MYSQL 中是保留的?
【问题讨论】:
标签: mysql sql-server oracle postgresql
我愿意拿我的一些名誉打赌,没有这样的事情。
部分是因为如果您担心跨平台 SQL 兼容性,最好的选择是使用一些 API 或 ORM 工具来抽象您的数据库代码,为您处理这些事情,并且得到很好的支持,所以会处理更新的数据库版本。
您可以使用的具体 API 类型取决于您的编程语言/平台。例如,PHP 有 Pear:DB 等,我个人发现在Django framework 中实现了相当不错的 Python 的 ORM 功能。我想其他平台上也应该有一些这样的东西。
【讨论】:
【讨论】:
我从来没有见过这样的东西,但是有这个开发工具,包括一个用于 oracle、mysql、db2 和 sql server 的语法检查器...http://www.sqlparser.com/index.php
但这似乎只是图书馆。你需要构建一个应用程序来利用解析器来做你想做的事。包含所有数据库的企业版将花费您 450 美元……哎呀!
编辑: 而且,在说完之后 - 看起来有人可能已经使用该库完成了您想要的操作:http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl
不过,在线工具不会自动检查每个数据库,您需要手动运行每个数据库。我也不能说它在检查语法方面有多好。你需要自己调查。
【讨论】:
你可以试试像this这样的格式化程序
他们将始终受到限制,因为他们不(也不可能)知道您可能在数据库中定义了哪些用户定义的函数(或者您有权或无权访问哪些内置函数)。
您也可以查看 ANTLR(但那将是一个离线解决方案)
【讨论】:
notfound、arraylen、sqlbuf、rowlabel 不应用作列名,但它们可以。几乎可以肯定,100% 的解决方案是不可能的。您可能需要添加更多详细信息,说明您正在做什么以及需要多少准确度。
我不知道有这样的,我的经验是它目前不存在。大多数是两个数据库的并排比较。该信息需要所遇到的所有数据库中的专家,这并不常见。版本也取决于,以了解支持什么。
ANSI 函数在确保跨数据库支持语法方面取得了长足的进步,但这取决于实施规范的供应商。迄今为止,他们并没有一次实现整个 ANSI 规范。
但是您可以通过询问具体问题并包括所涉及的数据库和使用的版本来在此类网站上众筹。
【讨论】:
只知道这个。不知道它对 MySQL 的效果如何http://developer.mimer.se/validator/
【讨论】: