2010-07-29 80 views
15

执行一个.SQL脚本文件从ANT它使用下面的任务正常工作:ANT sql任务:如何运行SQL和PL/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的任务将失败。这可以通过使用下面的代码片断来解决:

<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任务会工作。另一个解决方案是使用“执行”任务与“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脚本执行失败。我试图设置的错误属性不会返回任何错误代码。

任何想法/建议如何解决这个问题?

感谢,

彼得

回答

6

彼得,

添加在脚本

WHENEVER SQLERROR EXIT SQL.CODE; 

然后sqlplus的将退出代码退出的开始!= 0

6

漂亮迟到,我想 - 但我希望这会帮助某人:

一般来说,我认为我们应该继续使用sql而不是exec可执行文件=“sqlplus”,原因很多,例如:如果我们更改了数据库提供程序,则不会使用sql在新进程中使用资源,“串门”将作为反对SQLPLUS.EXE等

无论如何,这里有一个如何让这两个PL/SQL &在相同的SQL脚本,这样它会工作的建议:

myScript.sql:


<copy todir="..."> 
    <fileset dir="...." includes="myScript.sql"/> 
    <filterchain> 
    <replaceregex byline="false" pattern=";" replace="{line.separator}/" flags="mg"/> 
    <replaceregex byline="false" pattern="/[\s]*/" replace=";${line.separator}/" flags="mg"/> 
    </filterchain> 
</copy> 

然后给结果: <sql delimeter="/" src="myScript.sql"/>

交代: 如果你有定期的SQL命令:

drop table x; 
select blah from blue where bli=blee; 

它们将被转化为:

drop table x 
/
select blah from blue where bli=blee 
/

这是equivlant - 和具有“/”分隔符的sql命令可以处理它们。

在另一方面,

BEGIN 
    blah 
END; 
/

将被转化为:

BEGIN 
    blas 
END/ 
/

,并使用正则表达式二 - 转换回

BEGIN 
    blas 
END; 
/

所以每个人都是赢家!欢呼!

祝你好运。

+0

我试着用斜线替换分号,它工作正常。不过,我有几个包装创建脚本,我用分号冒号。如果我用斜杠替换分号,ant会成功执行sql脚本,但是所有的包都是由编译错误创建的,因为错误'遇到的符号/'有没有什么办法可以解决这个问题?谢谢 – user75ponic 2012-11-08 12:20:46