我們目前運行特定的SQL腳本,我們的螞蟻部署過程的一部分。如何將所有的sql文件應用到目錄中?
我們想要做的是改變這種做法,我們運行在一個給定的目錄中的所有SQL腳本。我們無法弄清楚如何在Ant中獲取此目錄列表,並遍歷列表並運行每個SQL腳本。有誰知道如何做到這一點?
注:我們目前正在使用運行「call sqlplus ${id}/${pw}@${db.instance} @${file}
」
我們目前運行特定的SQL腳本,我們的螞蟻部署過程的一部分。如何將所有的sql文件應用到目錄中?
我們想要做的是改變這種做法,我們運行在一個給定的目錄中的所有SQL腳本。我們無法弄清楚如何在Ant中獲取此目錄列表,並遍歷列表並運行每個SQL腳本。有誰知道如何做到這一點?
注:我們目前正在使用運行「call sqlplus ${id}/${pw}@${db.instance} @${file}
」
我會建議使用Ant SQL
task螞蟻exec
任務運行SQL文件。然後,您可以指定以下內容:
<sql
driver="org.database.jdbcDriver"
url="jdbc:database-url"
userid="sa"
password="pass">
<path>
<fileset dir=".">
<include name="data*.sql"/>
</fileset>
<path>
</sql>
我在oracle數據庫上基本上做同樣的事情..但使用sqlplus和apply任務。這允許腳本包含DDL語句。
,你有一個命令行程序使用顯然只工作。 使用ant 1.8.2和antcontrib。
我已經定義了幾個宏的使用。(見下文),然後就打電話一樣
<compile_sql connectstring="${db.connect_string}" >
<filelist dir="${db_proc.dir}" files="specific_file.sql" />
<fileset dir="${db_proc.dir}" includes="wildcard*.pks" />
<fileset dir="${db_proc.dir}" includes="wildcard*.pkb" />
</compile_sql>
的宏如下
<macrodef name="compile_sql">
<attribute name="connectstring" />
<attribute name="dirtostart" default=""/>
<attribute name="arg1" default=""/>
<element name="sqllist" implicit="true" description="filesetlist of sql to run"/>
<sequential>
<check_missing_files>
<sqllist/>
</check_missing_files>
<apply executable="${sqlplus.exe}" failonerror="true" verbose="true" skipemptyfilesets="true" ignoremissing="false" dir="@{dirtostart}">
<arg value="-L"/>
<arg value="@{connectstring}"/>
<srcfile prefix="@" />
<sqllist/>
<arg value="@{arg1}"/>
<redirector>
<globmapper id="sqlout.mapper"
from="*"
to="*.out"/>
</redirector>
</apply>
</sequential>
</macrodef>
和
<macrodef name="check_missing_files">
<element name="checkfilelist" implicit="true" description="filelist of files to check for existance"/>
<sequential>
<restrict id="missing.files" xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
<resources>
<checkfilelist/>
</resources>
<rsel:not>
<rsel:exists/>
</rsel:not>
</restrict>
<fail message="These files are missing: ${ant.refid:missing.files}" >
<condition >
<length string="${ant.refid:missing.files}" when="greater" length="0" />
</condition>
</fail>
</sequential>
</macrodef>
要意識到,函數聲明中的ant sql任務'阻塞'。 我還不知道如何解決這個問題。 – NSherwin 2010-07-14 02:13:41