gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:25:37 27 4
gpt4 key购买 nike

上下文

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

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

问题

脚本运行良好,但有一个异常(exception):

此 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 语法中没有看到“转义”)

谢谢

最佳答案

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

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

感谢大家的参与

关于sql - ant sql insert 语句在 '--' 字符串上失败。解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com