如何使用 mysql 命令行执行(通过 ant)一组 sql 文件

发布于 2025-01-01 04:09:23 字数 1454 浏览 1 评论 0原文

我想执行给定目录中的所有 sql 文件。 我想要进行的调用是这样的:

mysql --host=dbbackend --user=stack --password=overflow dbname -e 'source file1.sql'

这可以表示为:

  <apply executable="mysql" dir="." failonerror="true">
      <arg value="--host=dbbackend"></arg>
      <arg value="--user=stack"></arg>
      <arg value="--password=overflow"></arg>
      <arg value="mydbname"></arg>
      <arg value="--e source dummy.sql"></arg>
      <fileset dir="${db.dump.location.data}" casesensitive="no" description="take all sql files">
          <patternset>
              <include name="**/*.sql" />
          </patternset>
      </fileset>
  </apply>

如果我在该目录中有 3 个 sql 文件,则 dummy.sql 被调用 3 次。到目前为止,一切都很好。是否有一个占位符可用于更改此行:

      <arg value="--e source dummy.sql"></arg>

变为:

      <arg value="--e source ${unknown.placeholder.name}"></arg>

如果有占位符,那么我想将其用于“apply”标记的“input”属性(并删除参数“-e”)。

有一个“srcfile”标签可用于“apply”元素,但我不能调用它(不起作用):

      <arg value="--e source"></arg>
      <srcfile/>

您对如何使用本机 ant 声明来做到这一点有建议吗? 是否可以使用 antcall+fileset(+占位符)构建解决方法?

新手的解决方法是通过文件集进行迭代并创建一个引用 sql 文件的临时 sql 文件。最后一步:通过“-e”将其称为静态。但这是我想删除的解决方法(通过这个问题)。

PS:我不想使用 ant-contrib 功能。

I want to execute all sql files which resistes in a given directory.
The call i want to make is something like this:

mysql --host=dbbackend --user=stack --password=overflow dbname -e 'source file1.sql'

This can be expressed as:

  <apply executable="mysql" dir="." failonerror="true">
      <arg value="--host=dbbackend"></arg>
      <arg value="--user=stack"></arg>
      <arg value="--password=overflow"></arg>
      <arg value="mydbname"></arg>
      <arg value="--e source dummy.sql"></arg>
      <fileset dir="${db.dump.location.data}" casesensitive="no" description="take all sql files">
          <patternset>
              <include name="**/*.sql" />
          </patternset>
      </fileset>
  </apply>

If i have 3 sql files in that dir, then dummy.sql is called 3 times. So far so good. Is there a placeholder available to change this line:

      <arg value="--e source dummy.sql"></arg>

into:

      <arg value="--e source ${unknown.placeholder.name}"></arg>

If there is a placeholder, then i want to use it for the "input" attribute of the "apply" tag (and remove the argument "-e").

There is a "srcfile" tag available for the "apply" element, but i can not call this (does not work):

      <arg value="--e source"></arg>
      <srcfile/>

Do you have suggestions on how to do it with native ant declaration?
Is it possilbe to build a workaround using antcall+fileset (+placeholder)?

The noobish workaround is to iterate via fileset and create a temp sql file with references to the sql files. As a last step: call it static via "-e". But that is a workaround that i want to remove (by this question).

PS: I do not want to use ant-contrib features.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡看悲欢离合 2025-01-08 04:09:23

为什么不使用 ant sql 任务,它旨在完全执行您想要的操作做什么?

否则,您可以使用 srcfile 嵌套元素:

<apply ... parallel="false">
  <...>
  <arg value="--e source" />
  <srcfile/>
  <fileset ...></fileset>
</apply>

应用任务的手册页

Why not using the ant sql task, which is designed to do exactly what you want to do?

Else, you may use the srcfile nested element:

<apply ... parallel="false">
  <...>
  <arg value="--e source" />
  <srcfile/>
  <fileset ...></fileset>
</apply>

There is a complete example on the manual page of the apply task.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文