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

use*_*465 4 sql ant oracle jdbc

上下文

我们正在更改我们的安装脚本以使用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 -----');
Run Code Online (Sandbox Code Playgroud)

相关错误

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

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

问题

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

谢谢

use*_*465 5

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

解决方法

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

这很失败

INSERT INTO email_client (email_client_id,generated_reply_text) VALUES(100002,'----- Original Message -----');
Run Code Online (Sandbox Code Playgroud)

这成功了

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

INSERT INTO email_client (email_client_id,generated_reply_text) VALUES(100002,'----- Original Message -----')
;
Run Code Online (Sandbox Code Playgroud)

细节

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

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

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

谢谢大家的称重