2010-07-29 74 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

相關問題