【发布时间】:2011-03-22 18:12:03
【问题描述】:
要从 ANT 执行 .sql 脚本文件,使用以下任务可以正常工作:
<sql
classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@@@{db.hostname}:@{db.port}:@{db.sid}"
userid="@{db.user}"
password="@{db.password}"
src="@{db.sql.script}" />
但如果 .sql 文件不仅包含纯 SQL,还包含 PL/SQL,则任务将失败。这可以通过使用以下 sn-p 来解决:
<sql
classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@@@{db.hostname}:@{db.port}:@{db.sid}"
userid="@{db.user}"
password="@{db.password}"
delimiter="/"
delimitertype="row"
src="@{db.sql.script}" />
但如果我的脚本同时包含 SQL 和 PL/SQL,那么这两个 ANT 任务都不会工作。另一种解决方案是将“exec”任务与“sqlplus”一起使用:
<exec executable="sqlplus" failonerror="true" errorproperty="exit.status">
<arg value="${db.user}/${db.password}@${db.hostname}:${db.port}/${db.sid}"/>
<arg value="@${db.sql.script}"/>
</exec>
但不幸的是,这个任务永远不会失败,因此即使 sql 脚本执行失败,构建也总是返回“SUCCESSFUL”。我尝试设置的错误属性不会返回任何错误代码。
任何想法/建议如何解决这个问题?
谢谢,
彼得
【问题讨论】: