语境
我们正在更改安装脚本,以使用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 -----');
相关错误
该蚂蚁错误似乎可以识别问题。由于它仍处于开放状态(8年后),所以我不希望很快得到修复。但是,因为问题仅出现在oracle中,所以可能是由驱动程序造成的。
oracle驱动程序:jdbc瘦驱动程序,版本10.2.0.1.0
有没有人可以同时在mssql和oracle中使用的解决方法?(例如,更改有问题的行以定义转义字符?在“插入” sql92语法中看不到“转义”)
谢谢
查看“ SQLExec”源并打开详细日志记录后,我找到了一种解决方法:
解决方法
如果sql语句包含一个包含“-”的字符串,请将定界符(分号)放在下一行。
失败了
成功
请注意,分号在单独的行上
INSERT INTO email_client (email_client_id,generated_reply_text) VALUES(100002,'----- Original Message -----') ;
细节
打开详细的日志记录,我看到当Ant遇到有问题的sql语句时,它实际上一次将三个sql语句传递给了jdbc驱动程序。令人反感的语句,下一个语句(也包含嵌入式“-”)和后续语句(不包含嵌入式“-”)。
我快速浏览了Ant代码,没有看到任何明显的错误。由于我不打算修补Ant,因此我寻找了一种解决方法。
进行调整后,我发现,如果我只是将分隔符(分号)移至嵌入了“-”的语句的下一行,则脚本将成功执行。
谢谢大家的参与