2

我正在尝试执行一个创建过程并执行它的 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 $;
4

1 回答 1

2

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

如果您在 ANT 脚本中设置 delimiter="$$" 而不是 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”中的所有 $$ 都将被转换为 $(只有一个符号),这会引发很多错误。

于 2012-04-20T06:08:13.500 回答