mysql - 从 ant 构建脚本运行 mysql 过程

标签 mysql sql stored-procedures ant

我正在尝试执行一个 sql 脚本,该脚本创建一个过程并执行它。我通过从 mysql 客户端手动运行它来验证该过程。但是当使用下面的脚本时会出现错误。

我的 Ant 脚本是

<sql driver="${mysql.driver.string.DE}" url="jdbc:mysql://${database.host}:${database.port}/${database.name}" userid="${database.username}" password="${database.password}" onerror="continue" delimiter="$$" delimitertype="row" keepformat="yes" rdbms="mysql">
    <transaction src="${mysql.dbupgrade.sql.dir.DE}/fixDuplicateClassNames.sql" />
    <transaction>commit;</transaction>
    <classpath>
        <fileset dir="${lib.dir.DE}">
            <include name="*.jar" />
        </fileset>
    </classpath>
</sql>

运行脚本时抛出的错误是

java.sql.SQLException: Syntax error or access violation message from server: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $;

最佳答案

据我所知,DELIMITER 属性在 ANT 使用的“file-x.sql”中是不可能的。您必须在“sql..标签”中设置它

如果您在 ANT 脚本中设置 delimiter="$$"并且NOT delimitertype="row",这将起作用。无需切换回“分隔符;”

文件-x.sql

DROP FUNCTION IF EXISTS Just$$


CREATE FUNCTION Just( xID SMALLINT )
RETURNS CHAR(30)
BEGIN
  DECLARE fun CHAR(30) DEFAULT '' ;
  SELECT name INTO fun FROM family WHERE ID=xID;
  RETURN fun;
END;
$$


insert into idcart (ID,gruppe,sort,beschr1)values(352, 35, 1,'just for fun')$$
insert into idcart (ID,gruppe,sort,beschr1)values(353, 35, 1,'just for fun');

注意设置所有$$,可以让最后一行用“;” 。但是,如果您将上面的行设置为不以 $$ 结尾,则出现错误。如果您使用 delimitertype="row"那么“file-x.sql”中的所有 $$ 将被转换为 $(只有一个符号),这会引发许多错误。

关于mysql - 从 ant 构建脚本运行 mysql 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233963/

相关文章:

php - 更新sql表时递归发送电子邮件

php - MySQL DATETIME 问题

mysql - 我在 SQL 消息中找不到解决方案。我想要一些建议

mysql - 如何理解导致 MySQL Function 中 Truncated incorrect double value 错误的原因?

postgresql - 尝试将简单执行存储过程转换为 postgres 函数 - 无法使 CURRVAL ('table_seq' ) 运行

sql-server - 将一列条目的值复制到同一记录的另一列,如果值为空

php - 错误捕获 LOAD DATA LOCAL INFILE 的最佳方法?

php - 使用 PHP 插入 MySql DB 不工作

mysql - 选择具有 IN 范围和 LIMIT 的查询

c# - 如何根据到期日期从库存表中获取准确的批处理 ID?