我正在尝试执行一个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 $;
答案 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”中的所有$$将被转换为$(仅一个符号)并且会引发许多错误。