从ant构建脚本运行mysql过程

时间:2012-04-19 17:58:01

标签: mysql sql stored-procedures ant

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

我的蚂蚁脚本是

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

1 个答案:

答案 0 :(得分:2)

据我所知,ANT使用的“file-x.sql”中无法使用DELIMITER属性。你必须在“sql .. tag”

中设置它

如果在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');

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