2012-04-19 49 views
2

我想执行一个sql脚本,它创建一个过程并执行它。我通过从mysql客户端手动运行它来更好地完成该过程。但是什么时候使用下面的脚本会给出错误。从蚂蚁生成脚本运行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 $; 
+0

错误来自fixDuplicateClassNames.sql文件 - 您可以附加该文件的内容吗? – 2012-04-19 20:08:21

回答

2

据我所知分隔符属性是不可能通过使用“文件x.sql”蚂蚁。如果您在ANT脚本中设置了delimiter =“$$”和NOT delimitertype =“row”,那么您必须将其设置在“sql ..标记”

这将起作用。无需切换回“分隔符”;

文件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”中的所有$$都将被转换为$(只有一个符号),并且会引发很多错误。