Java Liquibase运行存储过程返回错误

Java Liquibase运行存储过程返回错误,java,mysql,stored-procedures,liquibase,Java,Mysql,Stored Procedures,Liquibase,我试图从变更集中设置sql文件,以运行保存到项目中的存储过程,但它返回sql错误。 在这里,我声明了sqlfile: <sqlFile path="/db/FindAllFriends.sql" endDelimiter="//" relativeToChangelogFile="true" splitStatements="true" stripComments="true" /> 如果我让“分隔符”出现在脚本中,它将返回一个sql错误(您的sql语法中有一个错误;请查看手册……

我试图从变更集中设置sql文件,以运行保存到项目中的存储过程,但它返回sql错误。 在这里,我声明了sqlfile:

<sqlFile path="/db/FindAllFriends.sql" endDelimiter="//" relativeToChangelogFile="true" splitStatements="true" stripComments="true" />
如果我让“分隔符”出现在脚本中,它将返回一个sql错误(您的sql语法中有一个错误;请查看手册……)。若我删除它,它将是确定的,但它只适用于“;”分隔符

如果我尝试删除然后创建过程(或多个语句):

我收到:
执行sql删除过程时出错(如果存在)

我的问题是,我需要先“删除过程(如果存在)”,然后再创建它,我被迫在脚本内部使用“分隔符”


我不知道这是mysql解析器的问题、liquibase错误还是我在脚本中犯了错误。

我(在Oracle上)与过程斗争了一段时间,我开始相信liquibase并不是在考虑过程的情况下制作的;)

不管怎么说,也许这些改变对你来说就足够了


我发现使用sqlplus进行更改是在Oracle上运行脚本的最佳解决方案…

最终我能够运行所有脚本;我不知道我第一次尝试时犯了什么错误,但现在起作用了。我必须在sqlFile中声明endDelimiter,并在脚本中使用此分隔符,我还从脚本中删除了“delimiter//”的声明

我已将所有脚本保存到java项目中,但当我删除数据库时,只会重新生成表,因此我需要在mysql中手动运行所有脚本。我可以为每个脚本在changeset中放置一个dropProcedure和一个createProcedure,但我喜欢简单地运行每个脚本中的任何内容。
DELIMITER //

CREATE PROCEDURE aaa()
BEGIN

END //

DELIMITER ;
Drop procedure if exists aaa;

CREATE PROCEDURE aaa()

BEGIN

END;