2

I am trying to execute a sql script which creates a procedure and execute it. I have verfier the procedure by running it manually from mysql client. But when is use the below script it gives an error.

my ant script is

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

the error thrown on running the script is

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..タグ」に設定する必要があります

ANT スクリプトでdelimiter="$$" とNOT delimitertype="row"を設定すると、これが機能します。「delimiter ;」に戻す必要はありません。

ファイル-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」内のすべての $$ が $ (符号は 1 つだけ) に変換され、多くのエラーがスローされます。

于 2012-04-20T06:08:13.500 に答える