0

我在使用 sqlplus 命令执行文件夹中的所有 SQL 文件时遇到问题

我可以使用此代码运行一个文件或第一个文件

<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>

; 但无法进一步处理其他文件

我已经尝试了应用任务的各种选项;但仍然没有成功;我认为导致问题的第二个文件开头没有“@”。

任何帮助将不胜感激。

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:/你的文件路径开头的字符串替换。此外,如果你将转储到文件,pathsep=" "可能应该替换pathsep="\n"为,因为可能需要每行有一个文件,但这需要测试)

然后根据一个文件中的所有选项或 cmd 行上的所有文件的选项,您:

  • 要么需要将其转储到 tmp 文件并使用此 tmp 文件名运行 http://ant.apache.org/manual/Tasks/echo.html
    在这种情况下,该文件应稍后删除

  • 直接在您的应用参数值中使用属性 prefixed.sql.files,例如:
    <arg value="${prefixed.sql.files}" />

于 2012-08-23T16:32:23.890 回答