我正在使用以下ant脚本进行jdbc编译。
<sql driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@10.184.133.133:1521:SUPP"
userid="${UsernameB}"
password="${PasswordB}"
onerror="continue"
delimitertype="row"
delimiter="/"
keepformat="yes">
我有一个包含以下内容的文件:
为CIVW创建OR REPLACE同义词CIVWS;
/
上述编译失败,出现以下错误。
java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
我知道分隔符是/因此在sql语句引起问题后的半冒号。有这样的数百个文件,都将在sqlplus中正确编译。但是jdbc失败了。我现在无法更改代码。对此有任何解决方法吗?我不能改变分隔符;也。请建议。
答案 0 :(得分:0)
首先你可以尝试使用... delimiter=";" delimitertype="row" ...
并确保包含“;”的pl / sql块被一些“;”分开。在一行(立即只有一个换行符 - 从而触发它作为单个语句执行)。
如果你不能添加“;”手动,尝试将源文件复制到某些tmp目录并尝试通过手动或通过一些自动正则表达式替换来更改它们(例如,使用带有regexp替换过滤器的ant copy任务)。
(例如,如果你幸运的话,用^(.*end\s*;?)(.*)$
替换匹配\1\n;\n\2
的行就足够了)
插入“;”的另一种解决方案 - 单行分隔符可以将这些块放在单独的文件中(可能是自动的)并通过<sql><transaction src="<yoursqlfile>.sql" /> <!--...--> </sql> <!--...-->"
ANT任务执行它们。