我正在尝试执行一个 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/