小编典典

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

sql

语境

我们正在更改安装脚本,以使用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语法中看不到“转义”)

谢谢


阅读 215

收藏
2021-05-30

共1个答案

小编典典

查看“ 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,因此我寻找了一种解决方法。

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

谢谢大家的参与

2021-05-30