0

sqlplus コマンドを使用してフォルダー内のすべての SQL ファイルを実行する際に問題があります

このコードで 1 つのファイルまたは最初のファイルを実行できます

<apply executable="sqlplus" dir="." parallel="false">
    <!-- <arg value="-S" /> -->
    <arg line="${db.user}/${db.pwd}@'${db.sid}'" />
    <arg value="@${db.run.build.script}" />  this is working, which is for executing one file
    <!-- <arg value="--e source" /> -->
    <srcfile/>
    <fileset dir="..\..\Documents\test\Database\SQL\common\test"
        casesensitive="no" description="take all sql files">
        <patternset>
            <include name="**/*.sql" />
        </patternset> 
     </fileset> 
</apply>

; しかし、他のファイルを続行することはできません

適用タスクでさまざまなオプションを試しました。それでも成功しません。2番目のファイルの先頭に「@」がなく、問題が発生していると思いました。

どんな助けでも大歓迎です。

4

1 に答える 1

0

まず第一に、私は sqlplus を使ったことがありません :-)

しかし、私がここで見た投稿に基づいて: http://www.zorbathegeek.com/161/run-multiple-sqlplus-queries-via-dos-batch-file.html@考慮する必要があるすべてのファイルへのパスへのプレフィックス。

制限に基づいて、複数のオプションがあります。

  • 最初に、次のようにコマンド ラインで複数のファイルを指定できるかどうかを確認します。

sqlplus [login details] @C:/<your_path>/<file1>.sql @C:/<your_path>/<file1>.sql

  • 可能かどうかに応じて、@(参考サイトで提供されている例のように) で始まるすべてのファイル名を含む 1 つのファイルを作成する必要があるかどうかを後で決定する必要があります。

プリペンディングを行う方法は?説明されている Ant の parhconvert を使用してみてください: http://ant.apache.org/manual/Tasks/pathconvert.html

<fileset dir="..\..\Documents\test\Database\SQL\common\test" id="sql.files">
      <include name="**/*.sql"/>
    </fileset>

<pathconvert pathsep=" " property="prefixed.sql.files" refid="sql.files">
      <map from="c:/" to="@c:/"/>
    </pathconvert>

c:/ファイルパスが始まる文字列に置き換える必要があります。さらに、ファイルにダンプする場合は、 1行に1つのファイルが必要になる可能性があるため、pathsep=" "おそらく置き換えられるpathsep="\n"必要がありますが、これにはテストが必要です)

次に、cmd 行の all in one file または all files のオプションに応じて、次のようにします。

  • tmp ファイルにダンプし、この tmp ファイル名を使用して実行する必要があります http://ant.apache.org/manual/Tasks/echo.html
    この場合、ファイルは後で削除する必要があります

  • 次のように、apply arg 値でプロパティ prefixed.sql.files を直接使用します。
    <arg value="${prefixed.sql.files}" />

于 2012-08-23T16:32:23.890 に答える