【问题标题】:Are there any SQL Validators that can check syntax against multiple database servers?是否有任何 SQL 验证器可以针对多个数据库服务器检查语法?
【发布时间】:2011-12-06 20:58:41
【问题描述】:

是否有任何 SQL 验证器可以针对多个数据库服务器检查语法?

例如,我可能想检查特定查询是否适用于 Oracle、MySQL 和 SQL Server。

比起查询的实际模式,我更关心 SQL 语法,所以一个可以捕获主要语法错误的工具,比如检测 SQL Server 和 Oracle 不支持 limit 子句就足够了。


编辑:

一些答案​​建议检查特定 DBMS 或 ANSI 标准的语法。

我正在寻找一种可能性,即在两个或多个数据库(例如 SQL Server 和 Oracle)之间实现某种功能的联合。我希望能够使用我在特定应用程序中定位的所有 DBMS 支持的任何 SQL 功能。

我不确定这是否值得。我认为这取决于几个数据库共享的非 ANSI 功能的数量。如果很少,那么以 ANSI 标准为目标可能会更好。

【问题讨论】:

  • 也许 SQLite shell 可以提供帮助。但是 LEFT 和 FULL 连接没有实现,并且与 Oracle 不同,您可以从无到有 SELECT 而在 Oracle 中您必须使用 DUAL。
  • 您要为多少个数据库编写代码?或者这是尝试编写一些与数据库无关的中间件?也许为 Oracle 尝试 dbms_sql.parse,对其他 dbms 尝试类似的(?)。
  • 它也应该验证每个数据库的哪个版本。
  • @tbone 和其他所有人,请参阅更新后的问题以获得一些说明。

标签: mysql sql sql-server oracle validation


【解决方案1】:

我不知道有什么具体的,这些将检查语句是否有效 ansi 92/99/2003...

http://developer.mimer.com/validator/index.htm

这将使您完成 99% 的任务(尤其是在仅执行 CRUD 操作的情况下)

也许如果您知道哪个数据库使用了哪些保留字,您可以滚动自己的简单检查器.. 见:How to find if a column name is a reserved keyword across various databases

(如前所述)如果您的目标是创建一个与数据库无关的系统,请考虑使用第三方工具,例如:实体空间

【讨论】:

【解决方案2】:

从 SQL Server 的角度来看,您可以检查语法"for compliance with the FIPS 127-2 standard. This is based on the ISO standard.",而不是针对多个数据库服务器检查 sql 语法。

例子:

SET FIPS_FLAGGER 'INTERMEDIATE'

【讨论】:

    【解决方案3】:

    对于 MySQL:尝试 dbForge Studio for MySQL 中的 automatic SQL syntax check 功能。

    对于 Oracle:dbForge Studio for Oracle 中的 PL/SQL 编辑器

    【讨论】:

    • 您必须构建您的应用程序的 Mac 版本 :)
    【解决方案4】:

    这是一个在线的 mysql 语法检查器,但这只是 mysql http://www.piliapp.com/mysql-syntax-check/

    【讨论】:

      【解决方案5】:

      您可以使用https://www.db-fiddle.com/。它支持以下数据库

      • MySQL 8.0
      • MySQL 5.7
      • MySQL 5.6
      • MySQL 5.5
      • PostgreSQL 13
      • PostgreSQL 12
      • PostgreSQL 11
      • PostgreSQL 10.0
      • PostgreSQL 9.6
      • PostgreSQL 9.5
      • PostgreSQL 9.4
      • SQLite 3.30
      • SQLite 3.26

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-30
        • 2010-09-13
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 2010-11-15
        相关资源
        最近更新 更多