ant sql insert语句在' - '字符串上失败。解决方法吗?

时间:2012-09-18 02:13:30

标签: sql oracle jdbc ant

上下文

我们正在更改我们的安装脚本以使用ant的“sql”任务和jdbc而不是专有的sql客户端sqlplus(oracle)和osql(msft)。

更新:添加了更多上下文。我们的“基础数据”(种子数据)由一系列.sql文件组成,这些文件包含“供应商中立”(即在oracle和mssql中均可用)sql语句。

问题

脚本运行正常,但有一个例外:

这个sql在Oracle中失败了。具体来说,某些东西(ant或jdbc驱动程序)将短划线/连字符视为“注释的开头” - 即使它们嵌入在字符串中。请注意,相同的sql与ant / sql和microsoft的jdbc驱动程序一起工作正常。

INSERT INTO email_client (email_client_id,generated_reply_text) VALUES(100002,'----- Original Message -----');

相关错误

ant bug似乎可以识别问题。因为它仍然开放(8年后),我不希望很快得到修复。但是,因为问题只出现在oracle中,所以它可能与驱动程序有关。

oracle驱动程序:jdbc瘦驱动程序,版本10.2.0.1.0

问题

有没有人有一个适用于mssql和oracle的解决方法? (例如,更改违规行以定义转义字符?我没有在'insert'sql92语法中看到'转义')

感谢

2 个答案:

答案 0 :(得分:5)

查看'SQLExec'源并打开详细日志后,我找到了一个解决方法:

解决方法

如果sql语句包含一个包含' - '的字符串,请将分隔符(分号)放在下一行。

此失败

INSERT INTO email_client (email_client_id,generated_reply_text) VALUES(100002,'----- Original Message -----');

成功

请注意,分号位于单独的一行

INSERT INTO email_client (email_client_id,generated_reply_text) VALUES(100002,'----- Original Message -----')
;

<强>详情

打开详细日志记录,我看到当Ant遇到有问题的sql语句时,它实际上将三个sql语句同时传递给了jdbc驱动程序。有问题的陈述,下一个陈述(也包括嵌入的' - ')和后续陈述(不包括嵌入的' - ')。

我快速浏览了Ant代码,没有看到任何明显的错误。由于我不打算修补Ant,我找了一个解决方法。

用它调整我发现如果我只是将分隔符(分号)移动到嵌入了“ - ”的语句的下一行,则脚本会成功执行。

感谢大家的称重

答案 1 :(得分:0)

你可以试试这个:

INSERT INTO email_client (email_client_id,generated_reply_text)
VALUES(100002,LPAD('-',5,'-') || ' Original Message ' || LPAD('-',5,'-'));