Как я могу применить все файлы sql в каталоге? - PullRequest
3 голосов
/ 12 февраля 2009

В настоящее время мы выполняем определенный сценарий SQL как часть нашего процесса развертывания Ant.

Что бы мы хотели сделать, это изменить это, чтобы мы запускали все сценарии SQL в заданном каталоге. Мы не можем понять, как получить этот список каталогов в Ant, перебрать список и запустить каждый сценарий SQL. Кто-нибудь знает, как это сделать?

Примечание: в настоящее время мы запускаем файл sql с помощью задачи Ant exec, которая запускает "call sqlplus ${id}/${pw}@${db.instance} @${file}"

Ответы [ 2 ]

8 голосов
/ 12 февраля 2009

Я бы порекомендовал использовать задачу Ant SQL . Затем вы можете указать следующее:

<sql
    driver="org.database.jdbcDriver"
    url="jdbc:database-url"
    userid="sa"
    password="pass">
  <path>
    <fileset dir=".">
      <include name="data*.sql"/>
    </fileset>
  <path>
</sql>
0 голосов
/ 25 июля 2011

Я делаю в основном то же самое с базой данных 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...