【问题标题】:ant sql insert statement fails on '--' strings. workaround?ant sql insert 语句在“--”字符串上失败。解决方法?
【发布时间】:2012-09-18 02:13:30
【问题描述】:

上下文

我们正在更改我们的安装脚本以使用 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 中都可以使用的解决方法? (例如,更改违规行以定义转义字符?我在“插入”sql92 语法中没有看到“转义”)

谢谢

【问题讨论】:

  • 您的列列表中是否允许有空列? (email_client_id,generated_reply_text,)
  • 过失。为简洁起见,我手动编辑/缩短了更长的 sql 语句,但留下了一些错误。感谢您指出这一点。
  • 你能用某种编码替换这些破折号吗?比如char(45)或者&ndash?
  • 您说它在 Oracle 中失败,但同时您说它在“ant/sql”中有效。那么SQL在Ant中工作怎么会失败呢?
  • 澄清:使用以下命令运行时语句成功:osql (msft)、sqlplus (oracle) 和 Ant 的 Sql 任务(使用 microsoft jdbc 驱动程序)。运行时失败:ant sql task (with oracle jdbc driver)

标签: sql oracle jdbc ant


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

调整后我发现,如果我简单地将分隔符(分号)移动到嵌入“--”的语句的下一行,脚本就会成功执行。

感谢大家的参与

【讨论】:

    【解决方案2】:

    你可以试试这个:

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

    【讨论】:

    • 我们的脚本文件运行与供应商无关的 sql。由于 MSSQL 缺少“lpad”功能,我们不能尝试这种方法。感谢您的建议。
    • 好吧,你标记了这个“oracle”......随便什么:)
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多