【问题标题】:Check if SQL statements are correctly formed检查 SQL 语句的格式是否正确
【发布时间】:2013-03-13 18:38:40
【问题描述】:

问题:我在一个 .SQL 文件中有几百个 sql 插入语句,这些语句将针对 oracle DB 运行。我想检查插入语句的格式是否正确,就像我想检测我是否错过了任何逗号等。只是我想确保该语句将运行而没有任何错误。所以我正在考虑编写一个小型 Java 应用程序来在运行之前检查脚本是否可能?

示例查询:

INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(24553, 'IBM');

我什至想在数据库中运行之前检查一下。假设我无权访问任何数据库。

【问题讨论】:

  • 数据库应该已经告诉你它是否格式不正确。
  • @andre 我什至想在数据库中运行之前检查一下。假设我无权访问任何数据库。
  • 根据我的经验,为一种语言制作解析器并非易事,工作量大约为一周到几周。我认为您可以更轻松地设置用于测试的数据库。
  • Sqlfiddle 在这里似乎是一个很好的解决方案。

标签: sql oracle plsql


【解决方案1】:

您可以尝试在每个 SQL 语句前加上“explain plan for”。如果 SQL 无效,解释将失败。

【讨论】:

    【解决方案2】:

    是的,这是可能的。

    伪代码可以是

    loop through lines
    {
     Take the string between first '(' and ')' position;
     split the string into first array with separator ',' using split function.
    
     Take the string between second '(' and ')' position;
     split the string into  second array with separator ',' using split function.
    
     compare the no of size for first and second array.
     if they are not equal 
     print the statement for correction;
    }
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      我以前从未在 Oracle 上工作过,所以我不确定是否可以启用某种 DUMMY/Test 模式。

      如果您只想检查诸如拼写错误之类的事情,那么我会将所有表名替换为对偶并运行插入。 这不会通过...验证数据类型的列计数。

      【讨论】:

      • 如果由我来决定,我会编写一个脚本或程序来从 csv 文件之类的文件中获取原始数据并让它生成插入语句。然后,您可以让您的代码事先验证每组数据,只要您正确处理了引号/dbl 引号等内容,它就应该每次都能正常工作。这对于小数据集显然是不切实际的......
      【解决方案4】:

      如果您了解 java,则可以使用此正则表达式模式,但它不会选择 ( 或 ),我一生都无法弄清楚如何匹配括号。 这仅适用于您的示例,并且您的整个插入需要在同一行中,每行只有一个插入。

      Pattern.compile("^\\s*INSERT\\s+INTO\\s+[a-zA-Z]\\w*\\s*.\\s*[a-zA-Z]\\w*\\s*,\\s*[a-zA-Z]\\w*\\s*.\\s*VALUES\\s*.\\s*\\d+\\s*,\\s*'\\w*\\'\\s*.\\s*;\\s*$");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        相关资源
        最近更新 更多