0

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

示例查询:

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

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

4

4 回答 4

0

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

于 2013-03-13T18:42:41.300 回答
0

对的,这是可能的。

伪代码可以是

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;
}

希望这对你有帮助

于 2013-03-13T18:45:28.580 回答
0

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

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

于 2013-03-13T18:48:28.723 回答
0

如果您了解 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*$");

于 2013-03-13T19:30:39.237 回答